2013-07-27 53 views
1

爲什麼會發生這種情況,我該如何避免這個問題?Python中的浮點數減法運算

Python 2.7.5 (default, Jun 27 2013, 09:29:43) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 0.3 - 0.1 - 0.1 - 0.1 
2.7755575615628914e-17 
>>> 0.3 - 0.3 
0.0 
>>> 0.3 - 0.2 
0.09999999999999998 
+1

[浮點限制](http://stackoverflow.com/questions/406361/floating-point-limitations)和http://stackoverflow.com/questions/588004/is-javascripts-floatingpoint -math-broken –

回答

3

因爲內部,計算機使用的格式(二進制浮點),其不能準確地表示相同的0.1,0.2或0.3,在所有的數。

編譯或解釋代碼時,您的「0.1」已經以該格式四捨五入到最接近的數字,即使在計算髮生之前,這也會導致小的舍入誤差。

What every programmer should know about floating point: Basic Answers

另外,如果你有興趣在解決這個饒人,看看定點表示。 Python seems to have a variety of solutions

+2

包含的'decimal'模塊似乎是最明顯的解決方案。從文檔:*「正確性轉化爲算術運算,在十進制浮點數中,0.1 + 0.1 + 0.1 - 0.3正好等於零,在二進制浮點數中,結果爲5.5511151231257827e-017。差異阻礙了可靠的平等測試,並且差異可能會累積,因此,在具有嚴格等式不變性的會計應用中,十進制是首選。「* – heltonbiker