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

Python Decimal库为何出现精度误差?官方称可精确表示十进制数

问题原因

你观察到的现象和Decimal模块本身的高精度特性无关,核心是输入参数的类型错误导致的:

  • 你传入Decimal()的参数3.3是Python原生二进制浮点类型(float),这类数值在写入代码时就已经存在精度损失:十进制的3.3无法用有限长度的二进制浮点数精确表示,实际存储的是和3.3接近、存在微小误差的二进制值,我们平时看到的3.3只是Python做了显示截断后的结果,其真实存储的数值就是3.29999999999999982236431605997495353221893310546875。
  • Decimal模块的设计逻辑是忠实还原输入参数的真实值:当你传入已经存在精度损失的float类型数值时,它只会完整保留该float自带的误差,不会自动修正输入参数本身的偏差,因此才会输出你看到的长串小数结果。
  • 官方文档提到的「Decimal可以精确表示十进制数」有明确前提:需要给Decimal传入十进制的精确表达形式,最常用的就是字符串格式的数值。

正确使用方式

只需把数值用字符串包裹后传入Decimal,就能获得完全精确的十进制计算结果:

>>> from decimal import Decimal
# 精确计算1.1+2.2
>>> Decimal('1.1') + Decimal('2.2')
Decimal('3.3')
# 精确生成3.3的Decimal实例
>>> Decimal('3.3')
Decimal('3.3')

如果你的数值来源本身就是float类型,需要先将float转换为符合你预期精度的字符串后再传入Decimal,避免引入原生float的精度误差。

内容的提问来源于stack exchange,提问作者scotty-nukem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:00:00