如何舍入Python Decimal实例

Cer*_*rin 5 python rounding

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

我已尝试使用文档中.quantize(Decimal('.01'))概述的方法,并在之前的答案中提出,但尽管尝试了不同的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')
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 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')
Run Code Online (Sandbox Code Playgroud)