首页 > 解决方案 > 在 c 中对浮点数进行算术运算时创建的随机数

问题描述

我对 c 很陌生,但我必须为学校创建一个程序,为此,我需要知道一个数字中有多少个十进制数,但是当我尝试这个时,一堆随机数来自第四维而我没有不知道如何解决它,有人可以帮助我吗?

这是代码:


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:你通过键盘输入数字,但同样的事情发生了。

标签: cmathfloating-point

解决方案


我想确保您只能输入 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。十亿已经不是过去的样子了


推荐阅读