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

使用Python Decimal模块仍存在浮点错误,如何解决?

问题根源与解决方法

你的问题出在alpha的初始化方式:你用Decimal(.01)创建Decimal对象时,传入的是二进制浮点数.01——而0.01无法用二进制浮点数精确表示,这个浮点数本身就带有微小误差,转成Decimal后自然会保留这个误差,导致最终计算结果不精确。

修正方案

  1. 用字符串初始化Decimal类型的小数,避免二进制浮点误差:把Decimal(.01)改成Decimal('0.01')
  2. 去掉冗余的Decimal转换:表达式中(1 - Decimal(alpha))里的Decimal(alpha)是多余的,alpha本身已经是Decimal类型,直接计算即可

修正后的代码:

from decimal import Decimal
Demands = [9,12,8,11]

fM = Decimal(10)
alpha = Decimal('0.01')
fM = (1 - alpha) * fM + alpha * Decimal(Demands[1 % 4])
print(fM)

运行结果

执行后会输出精确的10.02,完全消除浮点误差。

关键说明

Decimal的核心优势是精确表示十进制小数,但前提是你传入的初始值是精确的十进制表示。如果传入的是二进制浮点数(比如0.01、0.1这类无法精确表示的数),Decimal会保留浮点数本身的误差,达不到精确计算的目的。因此,初始化Decimal小数时,务必使用字符串而非浮点数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:44:55