原因如下:
出現(xiàn)上面的情況硅确,主要還是因浮點數(shù)在計算機(jī)中實際是以二進(jìn)制保存的目溉,有些數(shù)不精確。
比如說: 0.1是十進(jìn)制菱农,轉(zhuǎn)化為二進(jìn)制后它是個無限循環(huán)的數(shù):
0.00011001100110011001100110011001100110011001100110011001100
而python是以雙精度(64)位來保存浮點數(shù)缭付,多余的位會被截掉,所以看到的是0.1循未,但在電腦上實際保存的已不是精確的0.1陷猫,參與運算后,也就有可能點誤差的妖。
------------------------------------------------------------------------------------------------------------------------------------
[Python3]計算高精確度的浮點數(shù)方法
decimal 模塊的"getcontext"和"Decimal"方法
getcontext().prec = 2 #設(shè)置精度
------------------------------------------------------------------------------------------------------------------------------------
Update
decimal模塊中绣檬,可以通過整數(shù),字符串或原則構(gòu)建decimal.Decimal對象嫂粟。如果是浮點數(shù)娇未,特別注意因為浮點數(shù)本身存在誤差,需要先將浮點數(shù)轉(zhuǎn)化為字符串星虹。
當(dāng)然精度提升的同時零抬,肯定帶來的是性能的損失。在對數(shù)據(jù)要求特別精確的場合(例如財務(wù)結(jié)算)宽涌,這些性能的損失是值得的平夜。但是如果是大規(guī)模的科學(xué)計算,就需要考慮運行效率了卸亮。畢竟原生的float比Decimal對象肯定是要快很多的褥芒。
-------------------------------------------------------------------------------------------------------------------------------
Other
浮點數(shù)和整數(shù)的比較
值相等,地址不同