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

如何在Python3中解决浮点数列表求和的精度误差问题?

解决Python浮点数精度误差问题

当然可以用Python标准库本身解决这个问题,根源在于二进制浮点数无法精确表示十进制的0.35:单个0.35存储时已是近似值,乘法是单次近似后运算,求和则是多次近似值累加,误差累积导致结果差异。以下是几种内置方案:

1. 使用decimal模块(精确控制小数精度)

decimal模块允许以十进制精确表示小数,可指定精度避免二进制浮点数的误差:

from decimal import Decimal, getcontext

# 设置足够的精度
getcontext().prec = 20
# 用Decimal精确表示0.35
num = Decimal('0.35')
print(num * 10)  # 输出 Decimal('3.5')
print(sum([num]*10))  # 输出 Decimal('3.5')
# 按需转成普通浮点数或字符串
print(float(num * 10))  # 3.5

2. 使用fractions模块(以分数形式精确计算)

fractions模块将小数转换为分数,基于整数运算完全避免浮点数误差:

from fractions import Fraction

num = Fraction('0.35')  # 自动转换为7/20
print(num * 10)  # 输出 Fraction(7, 2),对应3.5
print(sum([num]*10))  # 输出 Fraction(7, 2)
# 按需转成浮点数
print(float(num * 10))  # 3.5

3. 合理四舍五入(快速统一结果)

如果仅需结果一致、不需要绝对精确,可对求和结果进行四舍五入,保留合适小数位数:

a = [0.35 for i in range(10)]
sum_result = round(sum(a), 2)
print(sum_result)  # 3.5
print(sum_result == 0.35*10)  # True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:46:21