>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
這是怎麼回事? 如何將0.47000000000000003
轉換爲字符串並將結果值恢復爲浮點型?Python float - str - float怪異
我在Windows上使用Python 2.5.4。
>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
這是怎麼回事? 如何將0.47000000000000003
轉換爲字符串並將結果值恢復爲浮點型?Python float - str - float怪異
我在Windows上使用Python 2.5.4。
float(和double)不具有無限精度。當然,在對它們進行操作時會發生舍入錯誤。
這是一個Python FAQ
同樣的問題出現quite regularly in comp.lang.python也。
我認爲這是一個常見問題的原因是,因爲python在所有其他方面都是完美的;我們期望它完美地執行算術 - 就像我們在學校教過的一樣。然而,任何已經完成數值方法課程的人都會告訴你,浮點數與完美的距離很遠。
通過這個例子 我認爲當你devide
>>> print(int(((48/5.0)-9)*5))
2
簡單的方法,這是在Python中的錯誤,我這個
>>> print(int(round(((48/5.0)-9)*5,2)))
3
解決這個問題,加入IEEE-754標籤 – 2009-11-22 10:45:56
RC:我認爲許多人(是的,程序員也)不知道IEEE 754定義了浮點數(不是每個人都閱讀語言規範:-))。所以我實際上認爲「浮點」標籤將是一個更好的選擇,除非有關標準本身的具體問題。 – Joey 2009-11-22 11:01:31
當然,那些提出這些問題的人不知道ieee-754是什麼...... – sth 2009-11-22 11:30:26