簡體   English   中英

貨幣python的浮點數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM