如何解决在C中进行浮点运算时创建的随机数
我对c语言很陌生,但是我必须为学校创建一个程序,为此,我需要知道一个数字中有多少个十进制数,但是当我尝试这样做时,一堆随机数来自第4维,并且我不知道该如何解决,有人可以帮助我吗?
代码如下:
int main(void) {
float test = 1.567;
while (test != 0){
test = test * 10;
test = test - (int)test;
printf("%f\n",test);
}
}
编辑: 我在Windows 10上运行,并且正在使用repl.it进行编程和运行。 这是我得到的输出
0.670000
0.700001
0.000008
0.000076
0.000763
0.007629
0.076294
0.762939
0.629395
0.293945
0.939453
0.394531
0.945312
0.453125
0.531250
0.312500
0.125000
0.250000
0.500000
0.000000
编辑2: 分配是我们必须创建一个程序,您必须在其中输入金额,它告诉您有多少2欧元硬币,1欧元硬币等。您需要获得该金额,因为您不能拥有4.63454欧元我想确保您只能输入2个十进制数字,否则会引发错误。因此,TLDR:您可以通过键盘输入数字,但是随后会发生同样的事情。
解决方法
我想确保您只能输入2个十进制数字,否则会引发错误。
这确实是一个文本处理问题,因为"%f"
,并且朋友会丢失文本输入的小数位所需的信息。
char buf[100];
if (fgets(buf,sizeof buf,stdin)) {
char *endptr;
double val = strtod(buf,&endptr); // add errno check as desired
unsigned char *dp = strchr(buf,'.');
if (endptr > buf && dp && isdigit(dp[1]) && isdigit(dp[2]) && dp[3] == '\n') {
// success
long long money = llround(val * 100.0); // Scale by 100 and round to an integer
...
} else {
// error
}
}
对于金钱,请考虑使用long long
。十亿是not what it used to be。
好的,我通过以下操作对其进行了修复:
#include <stdio.h>
int main(void) {
float test = 1.567;
int euro = 0;
int cent = 0;
int eurocent = 0;
float CentFloat = 0;
euro = (int)test;
CentFloat = test - euro;
cent = CentFloat * 100;
eurocent = euro *100 + cent;
//test2 = test * 10;
printf("%.30f\n",test);
printf("%d\n",euro);
printf("%d\n",cent);
printf("%d\n",eurocent);
}
输出为:
1.567000031471252441406250000000
1
56
156
这与我最初的想法并不完全相同,但是它解决了必须检查是否有人输入了太多十进制数字的问题,并且使我的原始程序与此兼容也很困难。比大家的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。