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