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

Python中round函数处理浮点数的逻辑及结果差异问题

Python浮点数round行为解析

先看你给出的实际运行结果:

round(12.675,2)
12.68
f"{12.675:.20f}"
'12.67500000000000071054'
print(round(12.675,2))
12.68
f"{2.675:0.20f}"
'2.67499999999999982236'

核心原因:浮点数的二进制存储误差

十进制里的很多小数,没法用有限长度的二进制小数精确表示,就像十进制里没法精确表示1/3一样。Python用IEEE 754双精度浮点数存储小数,这种存储方式会对无法精确表示的数做近似处理:

  • 你写的12.675,实际存储在内存里的是一个比它略大的值:12.67500000000000071054
  • 而2.675实际存储的是一个比它略小的值:2.67499999999999982236

round函数的处理逻辑

round函数的计算依据是浮点数在内存里的实际存储值,不是你写的十进制字面量:

  1. 对于12.675的实际存储值,它更接近12.68而不是12.67,所以保留两位小数时得到12.68。
  2. 对于2.675的实际存储值,它更接近2.67而不是2.68,如果执行round(2.675,2),结果会是2.67。

另外,Python的round默认使用银行家舍入法(四舍六入五成双):当要舍入的数字正好是5时,会让结果的最后一位变成偶数。但这个规则只在浮点数能精确表示“x.xx5”这种值时生效,而大部分情况下,这类十进制小数都无法被精确存储,所以实际表现会基于存储的近似值判断舍入方向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:27:33