#include<stdio.h>
main()
{
int a,b;
float f;
scanf("%2d%3d%4f",&a,&b,&f);
printf("%d %d %f",a,b,f);
}
当我运行这个程序并输入2 4 56.8时,它输出2 4 56.799999 .....但我希望2 4 56.8 ....为什么会这样???
答案 0 :(得分:6)
这是正确的。浮点数是近似值。正如0.33333333是1/3的近似值,56.7999999是56.8的近似值。 0.1没有确切的浮点表示。
查看已撰写的内容:
答案 1 :(得分:0)
56.8在C编译器使用的浮点格式中不能完全表示。 参见每个计算机科学家应该知道的关于浮点运算的内容(1991)作者:David Goldberg。
答案 2 :(得分:0)
这可能与浮点不准确有关。
答案 3 :(得分:0)
所有浮点数都不能存储为精确值,因为浮点数域的连续空间被映射为离散级别。例如,浮点数可以以IEEE754单精度格式存储。它将浮点数存储在32位内存中的三个部分中。假设[a, b]
是两个最接近的浮点数,可以用IEEE754格式精确表示,但在a
和b
之间我们将有无数个浮点数,在这种情况下这些数字将使用a
或b
近似。这会导致您遇到的不精确。
该数字以标准化格式存储,但某些非常小的数字可以非标准化格式存储。看看文件。
例如在您的情况下56.8 IEEE754单点精度表示将如下:
现在,如果您将此数字转换回十进制数,那么您将获得
因此,当您从IEEE754单精度格式中检索值时,它变为:56.799999237,其中存储了56.8
您可以在此处使用IEEE754表示:http://www.h-schmidt.net/FloatConverter/IEEE754.html