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

Python浮点数取模(Modulo)返回非预期余数问题求解

问题原因解答

核心本质:浮点数的二进制存储精度限制

  • 所有十进制小数在计算机底层都会转换为二进制存储,绝大多数十进制有限小数都无法转换为有限长度的二进制数,只能做精度截断后存储为近似值。你在代码中写的9.2,实际存储到内存中时并不是数学意义上严格等于9.2的数值,而是一个和9.2极其接近的近似值。

两种运算结果差异的原因

  • 9.2 / 4的结果是2.3,本身同样是近似值,只是这个近似值刚好匹配Python默认的浮点数打印规则,会被简化显示为2.3,看起来和预期一致。
  • 取余运算的底层逻辑是:a % b = a - (b * int(a // b)),代入数值计算时,近似存储的9.2减去4*2=8后,得到的差就不是精确的1.2,而是你看到的1.1999999999999993。

解决方案

如果需要精确的十进制小数运算,可以使用Python标准库的decimal模块实现:

from decimal import Decimal
# 注意构造Decimal时要传入字符串,不能直接传浮点数
res = Decimal('9.2') % Decimal('4')
print(res) # 输出为1.2,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:03