2011-06-26 127 views
6

由於某些原因,小數對象在乘以時會失去精度。沒有理由發生。請檢查測試用例並啓發我。python十進制精度

from decimal import * 
getcontext().prec = 11 

a = Decimal('5085.28725881485') 
b = 1 

print getcontext() 
print 'a  = '+str(a) 
print 'b  = '+str(b) 
print 'a * b = '+str(a * b) 

和輸出:如果

Context(prec=11, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, InvalidOperation, Overflow]) 
a  = 5085.28725881485 
b  = 1 
a * b = 5085.2872588 

不知道這是相關的,但使用python2.6的。

+0

您將精度設置爲11,結果中有11位有效數字。問題是什麼? –

+0

點後不精確的平均數字? – marrat

+2

有沒有什麼辦法可以將精度限制在點數之後呢? – marrat

回答

11

您在上下文(11位)指定的精度進行計算時,創建decimal.Decimal對象時不會僅適用 - 和結果,5085.2872588確實遵守該限制。作爲乘數使用1不會改變關於精度的規則;算術運算的結果總是考慮精度。

如果您正在尋找decimal.Decimal以返回四捨五入至特定數量的地方的數字,則上下文對象的create_decimal方法將爲您執行此操作。