Python浮點數(小數)運算誤差的原因和解決辦法

憂鬱白襯衫發表於2019-07-09

原因解釋:
浮點數(小數)在計算機中實際是以二進位制儲存的,並不精確。
比如0.1是十進位制,轉換為二進位制後就是一個無限迴圈的數:
0.00011001100110011001100110011001100110011001100110011001100
python是以雙精度(64bit)來儲存浮點數的,後面多餘的會被砍掉,所以在電腦上實際儲存的已經小於0.1的值了,後面拿來參與運算就產生了誤差。

 

解決辦法:
使用decimal庫
from decimal import *
a = Decimal('4.2')
b = Decimal('2.1')
c = a * b

 

當精度提升的同時,也必然犧牲效能。有時候是值得的,比如在財務對資料精度要求比較高的情況下。

相關文章