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

为什么使用Python的decimal模块时0.02不等于精确的0.02?

问题结论

这不是decimal模块的bug,属于使用方式错误。

偏差产生的原因

你传入Decimal构造函数的0.02是Python原生的float类型,底层为双精度二进制浮点数。受限于二进制浮点数的存储规则,0.02这类十进制小数无法被精确存储,你写出0.02的那一刻,内存中实际存储的就已经是你看到的那段长尾数近似值。decimal模块只是如实还原了这个已经存在精度损失的float值,偏差在传入参数之前就已经产生,和decimal模块无关。

正确使用方式

需要精确表示十进制小数时,必须将数值以字符串格式传入Decimal构造函数,跳过float的精度损失环节:

import decimal
print(decimal.Decimal("0.02"))
# 输出:0.02

如果必须从float类型转换,可以调用Decimal.from_float()方法,但该方法会保留float本身的精度误差,仅适用于明确接受误差的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:09:03