我們先來看一個不可思議的錯誤:
1.2-1.0=0.19999999999999996
這是一個常見的錯誤,你遇到過嗎?今天我們就一起來分析一下:
- 原因是什麼?
- 如何得到正确的運算?
- python中還有哪些意想不到的錯誤?
先說原因
如果你對計算機毫無了解,你可以跳過這部分,直接去看下一小節:如何得到正确的運算。
這是因為浮點數運算的特殊性決定的,其它程式設計語言也有這個問題。
Python的官方解釋器CPython(也就是你下載下傳到電腦上的Python安裝包的源碼) 中的 float 類型使用C語言的 double 類型進行存儲。float 對象的值是以固定的精度(通常為 53 位)存儲的二進制浮點數,由于 Python 使用 C 操作,而後者依賴于處理器中的硬體實作來執行浮點運算。
**簡單來說,許多可以輕松地用十進制表示的數字不能用二進制浮點表示。**1.2在電腦上存儲的值實際值是:
1.1999999999999999555910790149937383830547332763671875
怎麼解決?
知道了原因,如何得到正确的結果呢?
不然文法知道一大堆,還是寫不好代碼;就像道理明白一大堆,依然過不好這一生一樣悲哀。
解決方法:使用python内置的decimal子產品
from decimal import Decimal
a = Decimal('1.2')
b = Decimal('1.0')
print(a - b) # Decimal('0.2')
# 輸出結果:0.2
這種方法的好處是精确計算,但也有一個壞處:影響計算速度。适用于你認為精度大于效率的時候,例如:金融行業。
還有哪些常見錯誤?
- 【Python新人】常見報錯及解決方案,看完少走3個月的彎路,建議收藏!
- Python官方整理的27個曆史遺留問題。