2016-08-12 100 views
0

我想限制我的float的精度,並將其用作下一個操作的精確值,但我在做十進制模塊時出錯。Python十進制精度和四捨五入

from decimal import * 

factor = 350/float(255) 

# Settings 
getcontext().prec = 1 
getcontext().rounding = ROUND_UP 

print Decimal(factor) 

Python的輸出: 1.372549019607843145962533526471816003322601318359375

預期和希望的結果:1.4

+0

使用'np.round'。 – Julien

+0

簡單地創建一個'Decimal'對象不會繞到當前上下文。爲此,有一個訣竅:你可以應用一元加號,如'+十進制(因子)'。話雖如此,這仍然不會達到你想要的:'prec'指的是有效位數的總數,而不是指向該點後的位置數。所以在這種情況下,你需要'prec = 2'。 –

+0

您可能還想查看'Decimal.quantize'方法。 –

回答

0

從Python文檔:(https://docs.python.org/2/library/decimal.html

新小數的意義僅由數確定數字輸入。上下文精度和舍入僅在算術運算期間起作用

getcontext().prec = 6 
Decimal('3.0') 
Decimal('3.0') 
Decimal('3.1415926535') 
Decimal('3.1415926535') 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85987') 
getcontext().rounding = ROUND_UP 
Decimal('3.1415926535') + Decimal('2.7182818285') 
Decimal('5.85988') 

因此您需要在操作中使用小數,而不是在打印結果時使用。