有问题找我 - 2008-2-29 11:15:00
double a=3.3,b=1.1;
int i=a/b;
为什么运行出来i=2
[用户系统信息]Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
person997 - 2008-2-29 12:30:00
除完了得2.99999999999....所以为2
我是单眼皮 - 2008-3-1 12:32:00
楼上正解~
int i=a/b;
int 是整型~~~~~~~
得出的结果是2.999999999
行迷 - 2008-3-7 11:40:00
补充下:
计算机存储数据是按二进制存的,那么3.3的表示成二进制是11.010011001100110011... , 1.1表示成二进制是1.000110011001100110011...这两个二制数都是无限循环的小数,计算机内部存储的时候会把它们截断(各个计算机的截断方法可能不同)。
也就是说,虽然你如此 赋值 double a=3.3,b=1.1; 但 a并不等于3.3,只是约等于3.3;b也是一样。这样,你应该知道为什么 a/b是2.999999999了吧。那么int i=2.99999999 ,计算机会根据整型数的格式截断2.9999999,现代计算机的截断方法一般都是直接舍掉小数点后面的。如此的会 i 的最后结果是 2。
因为double类型截断而出现的bug不在少数:
例如
double i = 0.1;
while(i!=1)
{
//do something
...
i += 0.1;
}
初学者可能以为这个循环会执行十次;但其实这是一个死循环。所以很多书上都建议用double数做循环或分支地判断条件时,要格外小心,最好不要用 == 或者!=判断两个double数
有问题找我 - 2008-3-7 20:03:00
知道了,谢谢
i=2.9999999999999996
有问题找我 - 2008-3-14 21:52:00
顺便问一下,网上说可以用lf看i的真实值,怎么用呢?
我只会setprecision的那个。
© 2000 - 2025 Rising Corp. Ltd.