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

为何Python中round(3.15,1)返回3.1而非预期的3.2?

为什么round(3.15,1)得到3.1而非预期的3.2?

这个问题的核心不是银行家舍入规则失效,而是浮点数的二进制存储精度限制在搞鬼:

  • 十进制的0.15无法被二进制浮点数精确表示,Python里你写的3.15实际存储的是一个略小于3.15的近似值(用高精度打印能看到是3.14999999999999955591),并非你直观看到的精确3.15。
  • 银行家舍入规则判断的是实际存储的浮点数数值,而非十进制字面量。这个略小的近似值,小数点后第二位的实际值小于0.05,所以执行round(3.15,1)时,会向下舍入到最近的偶数位3.1,而非向上到3.2。
  • 4.15符合预期是因为它的二进制近似值略大于4.15(高精度打印为4.15000000000000035527),小数点后第二位实际值略大于0.05,触发银行家舍入规则后向上舍入到偶数位4.2。

你可以用以下代码验证这个近似值:

# 打印高精度浮点数
print(format(3.15, '.20f'))  # 输出: 3.14999999999999955591
print(format(4.15, '.20f'))  # 输出: 4.15000000000000035527

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:43:17