如何将 Python Decimal 实例四舍五入为特定位数,同时四舍五入到最接近的小数?
我尝试使用文档.quantize(Decimal('.01'))中概述的方法,中建议的方法,但尽管尝试了不同的 ROUND_ 选项,它似乎也无法正确舍入。我还尝试设置 getcontext().prec,但这似乎只能控制整个数字的总位数,而不仅仅是小数。
.quantize(Decimal('.01'))
例如我正在尝试做类似的事情:
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')
要将 Python Decimal 实例四舍五入到特定的小数位数,且按照常规的四舍五入规则(即四舍五入到最接近的小数),你应该使用 .quantize() 方法,并且指定适当的舍入方法。
Decimal
.quantize()
你可以使用 .quantize() 方法并配合 ROUND_HALF_UP 舍入模式,这将执行标准的四舍五入行为。
ROUND_HALF_UP
以下是完整的代码示例:
from decimal import Decimal, ROUND_HALF_UP # 示例:四舍五入到 2 位小数 assert Decimal('3.605').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) == Decimal('3.61') assert Decimal('29342398479823.605').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) == Decimal('29342398479823.61') assert Decimal('3.604').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) == Decimal('3.60') assert Decimal('3.606').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) == Decimal('3.61')
Decimal('0.01')
.quantize(Decimal('0.01'))
rounding=ROUND_HALF_UP
ROUND_*
decimal 模块提供了几种舍入模式,你可以根据需要选择不同的模式:
decimal
ROUND_HALF_DOWN
ROUND_UP
ROUND_DOWN
ROUND_HALF_EVEN
ROUND_CEILING
ROUND_FLOOR
更多关于舍入模式的详细信息,可以参考官方文档。
round()
为了将 Decimal 实例四舍五入到特定的小数位数,应该使用 .quantize() 方法,指定精确的小数位数并选择合适的舍入方式,如 ROUND_HALF_UP 来实现标准四舍五入行为。这样,你就能控制数字的小数位数,同时确保按预期进行四舍五入。