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

Python3中round函数对部分值取整异常:4800.5返回4800而非4801

Python 3中round(4800.5)返回4800的原因

这个结果是Python 3的round函数默认舍入规则导致的,不是程序bug。
Python 3的round采用的是银行家舍入法(四舍六入五成双),不是大家日常认知里的“四舍五入”,具体规则如下:

  • 待舍弃的部分数值小于5时,直接舍去保留位后的内容
  • 待舍弃的部分数值大于5时,保留位向前加1
  • 待舍弃的部分数值恰好等于5时,看保留位最后一位的奇偶性:如果是偶数就直接舍去,如果是奇数就向前加1,最终让保留位的最后一位为偶数

你遇到的round(4800.5)刚好命中第三种情况:舍弃部分是0.5,整数部分最后一位是0(偶数),所以直接舍去0.5返回4800。可以用几个测试用例验证这个规则:

print(round(4800.5))  # 输出4800,末位0为偶数,舍去
print(round(4801.5))  # 输出4802,末位1为奇数,进1后末位为2(偶数)
print(round(2.5))     # 输出2
print(round(3.5))     # 输出4

如果需要实现传统认知里的四舍五入效果,可以借助decimal模块手动指定舍入模式为ROUND_HALF_UP:

from decimal import Decimal, ROUND_HALF_UP

def half_up_round(num):
    return int(Decimal(str(num)).quantize(Decimal('0'), rounding=ROUND_HALF_UP))

print(half_up_round(4800.5)) # 输出4801,符合常规四舍五入预期

补充说明:这个场景下不存在浮点数精度误差问题,0.5是2的-1次幂,可以被二进制浮点数精确表示,结果完全是舍入规则导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:45:32