原因
浮點(diǎn)數(shù)(小數(shù))在計(jì)算機(jī)中實(shí)際是以二進(jìn)制存儲(chǔ)的通贞,并不精確搞监。
比如0.1是十進(jìn)制苛败,轉(zhuǎn)換為二進(jìn)制后就是一個(gè)無(wú)限循環(huán)的數(shù):
0.00011001100110011001100110011001100110011001100110011001100
python是以雙精度(64bit)來(lái)保存浮點(diǎn)數(shù)的满葛,后面多余的會(huì)被砍掉,所以在電腦上實(shí)際保存的已經(jīng)小于0.1的值了罢屈,后面拿來(lái)參與運(yùn)算就產(chǎn)生了誤差嘀韧。
解決:decimal
庫(kù)
from decimal import *
a = Decimal('4.2')
b = Decimal('2.1')
c = a * b
缺點(diǎn)
當(dāng)精度提升的同時(shí),也必然犧牲性能缠捌。但是有時(shí)候是值得的锄贷,比如在財(cái)務(wù)對(duì)數(shù)據(jù)精度要求比較高的情況下。