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

Python中//地板除法与/浮点数除法运算结果差异问题求解

Python中10000 // 0.1与10000 / 0.1结果差异的原因

这个差异本质是两个运算符的底层处理逻辑不同,叠加浮点数精度限制共同导致的:

1. 浮点数存储的前置前提

十进制的0.1无法用二进制浮点数精确表示,Python默认的双精度float类型存储的0.1实际值约为0.10000000000000000555,略大于数学意义上的0.1。
用这个实际存储值计算10000除以0.1,真实的数学商约为99999.99999999999444,略小于100000。

2. 两个运算符的核心处理差异

  • / 是真除法:遵循IEEE 754浮点数运算标准,计算后会对结果做就近舍入(偶数舍入)。上面的商99999.99999999999444和100000.0的差值小于双精度浮点数的最小可分辨精度(ULP),所以会被舍入为100000.0,也就是你看到的输出结果。
  • // 是地板除法:运算逻辑是直接对真实的商做向下取整,不会做浮点数舍入操作。注意//的执行逻辑并不是“先调用/得到结果再取整”,而是会保留除法运算的中间精度后直接做向下取整,所以不会用到/运算舍入后的100000.0这个结果。商99999.99999999999444向下取整的结果就是99999.0,和/的结果自然不同。

补充验证

你可以用高精度十进制计算模块decimal验证这个逻辑:

from decimal import Decimal, getcontext
getcontext().prec = 30
# 查看0.1的实际存储值
print(Decimal(0.1)) 
# 高精度计算10000 / 0.1的结果,确实小于100000
print(Decimal(10000) / Decimal(0.1)) 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:01