如何舍入Python Decimal实例

时间:2013-04-05 02:00:51

标签: python rounding

如何将Python Decimal实例舍入到特定的位数,同时舍入到最接近的小数?

我已尝试使用docs中列出的.quantize(Decimal('.01'))方法,并在previous answers中提出建议,但尽管尝试了不同的ROUND_选项,但它似乎并未正确舍入。我也尝试过设置getcontext()。prec,但这似乎只能控制整个数字中的总位数,而不仅仅是小数位数。

e.g。我正在尝试做类似的事情:

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')

1 个答案:

答案 0 :(得分: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')