2013-10-27 56 views
3

Python代碼:爲什麼這四行代碼給出0.45 <0.45爲真

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是真的?

+3

http://docs.python.org/2/tutorial/floatingpoint.html – georg

+0

浮點問題,請查看它們。浮動**不是**確切表示。 – Wrikken

+0

這是一個通用計算問題,也可以在其他語言中找到,請參閱:http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – Paul

回答

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 
+0

謝謝,但爲什麼0.35 + 0.05 = 0.3999 ....我是新來的python – Tim

+5

@ user62367這是不相關的蟒蛇,閱讀:[每個計算機科學家應該知道什麼浮點算術](http://docs.oracle.com/cd/E19957-01/ 806-3568/ncg_goldberg.html) –

1

這被稱爲浮點錯誤。它是由於你想用無限的字節數表示無限數量的數字而產生的。因此,將一個浮點數與另一個浮點數相加將產生一個浮點數,該浮點數可能接近實際的數學結果。 「接近」可能意味着0.0000001左右與預期結果的偏差。您可以在這裏閱讀有關浮點錯誤的更多信息:http://support.microsoft.com/kb/42980

相關問題