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

为何Python中5.5%1.1返回1.0999999999999996而非0.0?

Python中5.5%1.1返回非0值的原因

核心问题出在浮点数的二进制精度限制:

  • 计算机中的float类型(Python采用64位双精度浮点数)通过二进制存储数值,但并非所有十进制小数都能被二进制精确表示。比如1.1这个数,转换成二进制后是无限循环的小数,类似十进制里的1/3=0.333...,所以存储时只能取近似值,这个值比真实的1.1略大一点。
  • 5.5虽能被二进制精确表示(5.5=11/2,属于2的负整数次幂的倍数),但受1.1近似存储值的影响,取余运算出现了偏差。

取余运算的逻辑是 a % b = a - (b * floor(a/b)),由于1.1的近似值略大,floor(5.5 / 近似1.1)得到的结果是4而非预期的5,最终计算出的余数就是5.5 - (近似1.1 *4),也就是你看到的1.0999999999999996。

而55%11和55.0%11.0能得到精确0的原因是:一定范围内的整数都可以被二进制精确存储,55和11的浮点表示完全精准,因此运算结果准确。

如果需要精确的十进制运算,可以使用Python的decimal模块:

from decimal import Decimal
print(Decimal('5.5') % Decimal('1.1'))  # 输出 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:31:41