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

如何修复Python中小数相加出现的精度误差问题?

Python浮点数精度误差(0.1+0.2≠0.3)解决方案

该问题不是Python的语言bug,是IEEE 754二进制浮点数标准的通用特性:绝大多数十进制有限小数无法用二进制浮点数精确表示,所以运行0.1 + 0.2时会返回0.30000000000000004这类不符合预期的结果,所有支持IEEE 754标准的编程语言都存在该问题。

可行解决方案

  • 方案1:使用标准库decimal做十进制精确计算(推荐用于金融、会计等高精度要求场景)
    注意初始化Decimal时必须传入字符串格式的数值,避免传入本身就有精度损失的浮点数:
    from decimal import Decimal
    res = Decimal('0.1') + Decimal('0.2')
    print(res)  # 输出 0.3
    # 也可以自定义全局精度
    from decimal import getcontext
    getcontext().prec = 2  # 设置全局保留2位有效数字
    
  • 方案2:使用round()函数截断精度(适合对精度要求不高的日常运算场景)
    对运算结果按需求保留指定小数位即可:
    res = round(0.1 + 0.2, 1)
    print(res) # 输出 0.3
    
  • 方案3:使用fractions模块做分数运算(适合需要完全精确的分数类运算场景)
    把小数转成分数运算,完全避免精度损失:
    from fractions import Fraction
    res = Fraction('0.1') + Fraction('0.2')
    print(float(res)) # 输出 0.3
    
  • 方案4:放大数值为整数运算(适合固定精度的业务场景,比如金额计算)
    比如金额计算时统一转为分(整数)运算,结束后再转回元:
    a = int(0.1 * 100) # 10分
    b = int(0.2 * 100) # 20分
    res = (a + b) / 100
    print(res) # 输出 0.3
    

额外注意事项

不要直接用==判断两个浮点数是否相等,建议用差值小于可接受阈值的方式判断:

a = 0.1 + 0.2
b = 0.3
print(abs(a - b) < 1e-9) # 输出True,判断为相等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:03