打印存储在变量中的值和使用 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
。
第二个例子中没有float
,double
的结果直接传给了printf
。
另外,请参阅 Is floating point math broken?。
我正在尝试编写一个简单的 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
。
第二个例子中没有float
,double
的结果直接传给了printf
。
另外,请参阅 Is floating point math broken?。