原因解釋:
浮點數(小數)在計算機中實際是以二進制存儲的,並不精確。
比如0.1是十進制,轉換為二進制后就是一個無限循環的數:
0.00011001100110011001100110011001100110011001100110011001100
python是以雙精度(64bit)來保存浮點數的,后面多余的會被砍掉,所以在電腦上實際保存的已經小於0.1的值了,后面拿來參與運算就產生了誤差。
解決辦法:
使用decimal庫
from decimal import * # 誤差會造成輸出一個無限接近於19.8的數字 In [17]: 6.6*3 Out[17]: 19.799999999999997 # 實際上應該是19.8 In [18]: Decimal('6.6')*3 Out[18]: Decimal('19.8')
當精度提升的同時,也必然犧牲性能。有時候是值得的,比如在財務對數據精度要求比較高的情況下。