可能重複:
Python float - str - float weirdness爲什麼在Python中劃分2/5.0時出現錯誤?
在蟒蛇,2/5.0
或2/float(5)
回報0.40000000000000002
爲什麼我得到這個錯誤在最後,我怎樣才能得到正確的值用於額外的計算?
可能重複:
Python float - str - float weirdness爲什麼在Python中劃分2/5.0時出現錯誤?
在蟒蛇,2/5.0
或2/float(5)
回報0.40000000000000002
爲什麼我得到這個錯誤在最後,我怎樣才能得到正確的值用於額外的計算?
歡迎使用IEEE754,enjoy your stay。
改爲使用decimal
。
查看this question的解釋。正確的做法是要麼
由於浮點運算不準確。您應該在您的額外計算中使用此值,並在完成後對結果進行四捨五入。如果您確切需要,請使用其他數據類型。
Ignacio上面有正確的答案。
IEEE標準有效地將浮點數存儲到二進制計算機中。這些細節非常詳細地介紹了數字的存儲方式,幾乎所有計算機都遵循這些規則。
他們也是錯的。二進制數字不能處理大多數正常數字,只是兩個冪。這些標準並沒有做一些棘手的事情,而是要求重新計算底部位數來實現四捨五入或其他技巧,這些標準選擇了效率。
這樣,您可以詛咒您的系統運行速度稍快。偶爾有關於以某種方式改變Python以解決這些問題的爭論,但是如果沒有效率的巨大損失,答案也不是微不足道的。
四處逛逛此:
一種選擇是挖掘到標準庫的「十進制」包。如果你堅持這些例子,並忽略長頁面,它會得到你想要的。沒有效率的賭注。
其次是做一個手動舍入和字符串截斷自己在一個輸出函數。如果你從不打印這些數字,那麼誰會關心這個數字是否有點偏離?
使用'decimal'確實**沒有解決這個問題。十進制數字不能再比二進制浮點數字表示所有的有理數。只需從2/5更改示例並將其替換2/3即可。 – 2010-02-12 19:29:46
請注意,Python 3.1有一個新的浮點格式化函數,可以避免這種外觀。有關更多詳細信息,請參見What's new in Python 3.1(搜索「浮點」)。
爲了您的細讀:*每個計算機科學家應該知道的關於浮點算術* http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-02-12 09:52:31
python教程解釋:http:// docs。 python.org/tutorial/floatingpoint.html – nosklo 2010-02-12 10:43:47
重複的DOZENS問題。請搜索。所有這些:http://stackoverflow.com/search?q=[python]+floating+point。具體來說這個:http:// stackoverflow。com/questions/1778368/python-float-str-float-weirdness – 2010-02-12 11:36:23