import decimal
decimal.getcontext().rounding = "ROUND_HALF_UP"
result = decimal.Decimal(5285.325).quantize(decimal.Decimal("0.00"))
print(result) # 5285.32
按道理来说 应该是可以得到5285.33的,网上各种资源也是说这样。
但是由于 ROUND_HALF_UP 四舍五入模式会将恰好处于两个选项中间的值(在这种情况下,处于 5285.32 和 5285.33 之间的值)向最接近的偶数选项上取整。由于 5285.325 恰好处于 5285.32 和 5285.33 的中间,因此应该向下取整为 5285.32。
然后没有然后了,也不知道怎么解决,最后想了想,只要避免精度问题就行了,于是思路就是把浮点型数据编程字符串数据再来操作,代码如下
import decimal
decimal.getcontext().rounding = "ROUND_HALF_UP"
result = decimal.Decimal(str(5285.325)).quantize(decimal.Decimal("0.00"))
print(result) # 5285.33
如此就能解决decimal小概率性的没有四舍五入的问题