3

蟒蛇代码:

x=0.35
while (x<0.45):
    x=x+0.05
    print x,"<",0.45, x<0.45

下面是输出:

0.4 < 0.45 True
0.45 < 0.45 True
0.5 < 0.45 False

为什么 0.45<0.45 是真的?

4

2 回答 2

7

因为您实际上是在比较:

0.44999999999999996 < 0.45

演示:

>>> x=0.35
>>> while (x<0.45):
        x = x+0.05
        print repr(x),"<",0.45, x<0.45
...     
0.39999999999999997 < 0.45 True
0.44999999999999996 < 0.45 True
0.49999999999999994 < 0.45 False

print调用str浮点数,它打印一个人类友好的版本:

>>> print 0.44999999999999996
0.45
>>> print str(0.44999999999999996)
0.45
>>> print repr(0.44999999999999996)
0.44999999999999996
于 2013-10-27T16:48:52.217 回答
1

这称为浮点错误。它源于您想用有限的字节表示无限数量的数字。因此,将一个浮点数与另一个相加将产生一个可能与实际数学结果接近的浮点数。“刚刚接近”可能意味着与预期结果有 0.0000001 左右的偏差。您可以在此处阅读有关浮点错误的更多信息:http: //support.microsoft.com/kb/42980

于 2013-10-27T16:52:42.307 回答