我正在使用DevC ++ 4.9,在WinXP SP3(32位)上运行,这是代码:
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
double value;
int i;
printf("Enter double: ");
scanf("%lf", &value);
i = value*100;
printf("double: %lf\n", value);
printf("int: %d\n", i);
system("PAUSE");
}
我输入了不同的值,结果如下:
测试1:
测试2:
测试3:
为什么测试1和测试2显示不同的结果??
答案 0 :(得分:6)
这是由于浮点数的四舍五入:
每个计算机科学家应该知道的关于浮点运算的内容: http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
3.07
无法用二进制表示。在您的情况下,它被四舍五入到略低于3.07
,因此100 * 3.07
正在评估306.9999999...
,它被截断为306。
同样适用于3.05
。但3.06
略微上升。因此100 * 3.06
正确显示为306。