5

如何将 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')
4

1 回答 1

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')
于 2013-04-05T02:12:31.463 回答