2013-04-05 79 views
4

如何將一個Python十進制實例四捨五入到最接近的小數時舍入到特定數量的數字?如何舍入Python十進制實例

我試過使用docs中提出的.quantize(Decimal('.01'))方法,並在previous answers中建議,但是儘管嘗試了不同的ROUND_選項,但似乎並不正確。我也嘗試設置getcontext()。prec,但似乎只能控制整個數字的總位數,而不僅僅是小數。

例如我試着這樣做:

assert Decimal('3.605').round(2) == Decimal('3.61') 
assert Decimal('29342398479823.605').round(2) == Decimal('29342398479823.61') 
assert Decimal('3.604').round(2) == Decimal('3.60') 
assert Decimal('3.606').round(2) == Decimal('3.61') 

回答

7

我認爲你需要使用decimal.ROUND_HALF_UP選項quantize得到你想要的東西。

>>> for x in ('3.605', '29342398479823.605', '3.604', '3.606'): 
    print x, repr(Decimal(x).quantize(Decimal('.01'), decimal.ROUND_HALF_UP)) 

3.605 Decimal('3.61') 
29342398479823.605 Decimal('29342398479823.61') 
3.604 Decimal('3.60') 
3.606 Decimal('3.61')