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

Python 3.9.10浮点数求和精度异常:结果与预期不符

浮点数运算的精度偏差问题解释

你看到的偏差是计算机浮点数二进制存储的固有精度限制导致的,和Python本身无关,所有遵循IEEE 754标准的编程语言都会出现类似情况。

核心原因

十进制里的有限小数,在二进制里可能是无限循环小数——就像十进制里1/3 = 0.333...无法精确表示一样。比如0.0401和0.0032这两个数,转换成二进制后都是无限循环的,计算机只能用有限长度的二进制位(Python用的是64位双精度浮点数)来近似存储它们,这种近似误差在运算后就会被放大显现出来,最终得到和数学预期略有差异的结果。

验证示例

你可以直接在Python里验证单个浮点数的存储偏差:

print("{0:.20f}".format(0.0401))
# 输出:0.04010000000000000163
print("{0:.20f}".format(0.0032))
# 输出:0.00319999999999999984

把这两个近似值相加:-0.04010000000000000163 + 0.00319999999999999984 = -0.036899999999999995,正好是你得到的结果。

解决办法

如果需要精确的十进制运算,可以用Python标准库中的decimal模块,它支持高精度的十进制计算:

from decimal import Decimal, getcontext
getcontext().prec = 10  # 设置精度
result = Decimal("-0.0401") + Decimal("0.0032")
print(result)
# 输出:-0.0369

或者用round()函数对结果取到指定小数位:

result = -0.0401 + 0.0032
print(round(result, 4))
# 输出:-0.0369

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:35:23