打印存储在变量中的值和使用 printf() 直接打印值时的输出差异

Difference in outputs while printing value stored in a variable and printing value directly using printf()

我正在尝试编写一个简单的 C 程序,它以米为单位获取用户输入并以公里、码和英里为单位打印输出四舍五入到小数点后 4 位。

我用过这个1米=0.001公里=1.094码=0.0006215英里

当我写这篇文章时,我得到了预期的输出:

#include <stdio.h>
int main()
{
   int m;
   float km, y, mi;
   scanf("%d",&m);
   km=(m*0.001);
   y=(m*1.094);
   mi=(m*0.0006215);
   printf("%.4f\n%.4f\n%.4f",km,y,mi);
   return 0;
}

输出:

0.1000

109.4000

0.0622

但是,当我写这篇文章时,我得到了第三个输出错误:

#include <stdio.h>
int main()
{
   int m;
   scanf("%d",&m);
   printf("%.4f\n%.4f\n%.4f",(m*0.001),(m*1.094),(m*0.0006215));
   return 0;
}

输出:

0.1000

109.4000

0.0621

你能帮我找出造成这种差异的原因吗?


编辑-1

这里我输入了100

float y=100*0.0006215;
printf("%f",y);

给出输出 0.062150

还有这个

printf("%f",100*0.0006215);

也给出了输出 0.062150


Edit-2

float y=100*0.0006215;
printf("%.4f",y);

给出了输出0.0622

同时:

printf("%.4f",100*0.0006215);

给出了输出0.0621

而在 Edit-1 中两者显示相同的输出。

请注意 0.001 是一个 double 值。

在第一个示例中,您将 double 结果分配给 float,截断了它的重要性,然后在传递给 printf 时提升为 double

第二个例子中没有floatdouble的结果直接传给了printf

另外,请参阅 Is floating point math broken?