You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设置ROUND_HALF_EVEN后,round(0.265,2)结果为0.27而非0.26?

为什么设置ROUND_HALF_EVEN后round(0.265,2)还是返回0.27?

问题核心原因

  • 内置round函数不遵循decimal上下文规则:你调用的round(a,2)中,a是float类型,这个round是Python内置函数,不会读取decimal模块的全局上下文设置,只遵循自身舍入逻辑。
  • float类型的精度误差:0.265作为float存储时,实际值并非精确的0.265——从你打印的Decimal(a)结果能看到,它是0.26500000000000001332267629550187848508358001708984375,这个值比0.265略大。内置round对这个数做两位小数舍入时,自然会得到0.27。

正确实现ROUND_HALF_EVEN舍入的方法

要让ROUND_HALF_EVEN规则生效,必须使用decimal模块的Decimal类型,并且用字符串而非float初始化Decimal(避免float精度误差),再通过Decimal的quantize方法或针对Decimal对象调用round函数实现舍入。

示例代码:

import decimal
from decimal import Decimal, ROUND_HALF_EVEN

# 确认全局上下文设置
print(decimal.getcontext())

# 用字符串初始化Decimal,保证数值精确
a = Decimal("0.265")
print(a)

# 方法1:使用quantize指定舍入规则和精度
result_quantize = a.quantize(Decimal("0.00"), rounding=ROUND_HALF_EVEN)
# 方法2:直接round Decimal对象,自动遵循上下文的rounding规则
result_round = round(a, 2)

print(result_quantize)  # 输出: 0.26
print(result_round)     # 输出: 0.26

内容的提问来源于stack exchange,提问作者Adil Khatri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:57:12