[英]Floating numbers for currency python
目前,我已經用python編寫了一個程序,該程序可以計算貨幣和許多其他東西。 現在我注意到關於浮點數的IEEE-754
問題。
有沒有辦法用正確的值來進行正確的數學運算(如python中的加法運算)?
例如:
0.1 + 0.1 + 0.1 = 0.3
我已經嘗試過decimal
庫,但似乎無法在四舍五入的地方給我正確的四舍五入數字。
問候。
使用decimal
模塊時,需要使用字符串進行初始化。 使用float
初始化將以高分辨率保留底層float
類型的不精確性。 例如,使用Decimal(0.1)
實際上會產生一個值:
Decimal('0.1000000000000000055511151231257827021181583404541015625')
因為這是float
0.1
表示的值的30位外推。
因此,不要測試Decimal(0.1) + Decimal(0.1) + Decimal(0.1) == Decimal(0.3)
(您以固定的十進制精度進行計算,但使用非十進制值進行初始化),請使用Decimal("0.1") + Decimal("0.1") + Decimal("0.1") == Decimal("0.3")
,您將獲得預期的結果。
除此之外,您還需要調整decimal
上下文的.prec
屬性,以確保保留預期的精度,但是通常可以保留全部精度,並且稍后使用quantize
方法將其舍入到正確的精度。
您是否嘗試設置上下文? 例如,下面的代碼按預期返回0.3:
import decimal
decimal.getcontext().prec = 1
a = decimal.Decimal(0.1)
print(a + a + a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.