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

Python代码浮点运算结果与数学计算不符问题咨询

为什么Python中1.11-1.10和2.11-2.10的结果不是精确的0.01?

这绝对是每个刚碰Python的开发者都会踩的坑!本质原因是计算机使用二进制存储浮点数,而很多十进制小数无法被精确表示为有限长度的二进制小数——就像你在十进制里没法精确写出1/3的结果一样。

举个直观的例子:十进制的0.1,转换成二进制是无限循环的0.0001100110011...,所以Python里存储的0.1其实是这个无限循环数的近似值。同理,1.11、1.10、2.11、2.10这些数在内存里都不是精确的十进制值,而是二进制近似值。当你做减法时,这些近似值的微小误差就会被放大,导致结果和你预期的0.01有偏差。

你可以试着打印出更多小数位来看看实际存储的数值:

d = 1.11 - 1.10
e = 2.11 - 2.10
print('d的精确值:', format(d, '.20f'))
print('e的精确值:', format(e, '.20f'))

运行后会看到类似这样的输出:

d的精确值: 0.01000000000000000888
e的精确值: 0.00999999999999978684

这就是为什么看起来相同的运算,结果却不一样——因为原始数值的近似误差在减法中表现出了不同的偏差。

怎么解决这个问题?

如果你需要精确的十进制运算(比如金融计算),推荐使用Python标准库中的decimal模块,它专门用来处理精确的十进制小数:

from decimal import Decimal

d = Decimal('1.11') - Decimal('1.10')
e = Decimal('2.11') - Decimal('2.10')
print('d= ', d, 'e= ', e)

这段代码的输出会完全符合你的预期:d= 0.01 e= 0.01

如果只是需要比较两个浮点数是否相等,不要直接用==,而是判断它们的差的绝对值是否小于一个极小的阈值(比如1e-9):

d = 1.11 - 1.10
expected = 0.01
if abs(d - expected) < 1e-9:
    print("d等于0.01(近似)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:36:16