Python如何对大数字字符串求和,避免转FLOAT出现精度丢失
高精度数字字符串求和实现方案
Python 内置的 decimal 标准库是专门用于处理十进制高精度运算的工具,直接用它即可完全避免float转换带来的精度丢失问题。
实现代码
from decimal import Decimal str1 = '5.123654879542658' str2 = '8.777548795426584' # 直接传入字符串初始化Decimal,全程无精度损失 sum_result = Decimal(str1) + Decimal(str2) # 转为字符串输出 print(str(sum_result))
上述代码运行输出结果为 13.9012036749693164,和十进制手动计算的结果完全一致。
原写法精度丢失的原因
float类型本质是双精度二进制浮点数,无法精确表示所有十进制小数,你在将字符串转为float的步骤就已经出现了精度损失,相加后的结果自然无法保证准确。
额外注意事项
- 初始化Decimal对象时必须直接传入数字字符串,不要先转float再传入,否则仍然会引入精度误差
- 如果需要自定义结果的小数位数,可以使用
quantize方法处理,例如保留8位小数的写法为:sum_result.quantize(Decimal('0.00000000'))
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

