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
相关产品推荐
相关产品推荐

