如何对Python Decimal实例进行四舍五入

7
如何将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')
1个回答

8
我认为您需要使用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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接