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

Python中如何避免小数加法时出现额外尾数位?

解决Python浮点数精度对比问题

这是Python里常见的浮点数精度问题——大部分十进制小数没法精确转换成二进制浮点数存储,像0.2这种数,在二进制里是无限循环的小数,存储时只能取近似值。多次累加后,这种微小的近似误差会被放大,就出现了32.0+5.0+0.2+0.2算出37.400000000000006的情况。

给你几个实用的解决思路:

  • 用round()函数做四舍五入
    把计算结果四舍五入到和目标值相同的小数位数,再做比较:

    print(37.4 < round(32.0+5.0+0.2+0.2, 1))
    

    这个方法简单直接,适合对精度要求不高的日常场景。

  • 用decimal模块精确计算
    如果是对精度要求高的场景(比如金融计算),可以用Python内置的decimal模块,它能精确处理十进制小数:

    from decimal import Decimal
    
    # 注意要用字符串传入数值,避免浮点数本身的精度问题
    total = Decimal('32.0') + Decimal('5.0') + Decimal('0.2') + Decimal('0.2')
    print(Decimal('37.4') < total)
    
  • 通过误差范围判断
    比较两个浮点数时,允许一个极小的误差范围(比如1e-9),判断它们的差值绝对值是否小于这个范围:

    total = 32.0 + 5.0 + 0.2 + 0.2
    # 不要直接比较相等/大小,而是判断差值是否在可接受范围内
    print(abs(total - 37.4) > 1e-9)
    

    这个方法常用于科学计算场景,避免微小误差导致的误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:01