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

为何Python的Decimal类生成额外数字?print(2.4)却显示精确?

为什么print(2.4)和Decimal(2.4)输出结果不一样?

首先明确核心事实:十进制的2.4无法用二进制浮点数精确存储,计算机里实际存储的是一个和2.4非常接近的二进制近似值,对应的十进制就是2.399999999999999911182158029987476766109466552734375。

那为什么print(2.4)能显示出2.4?
这是Python对浮点数输出做的舍入优化:Python的浮点数在转成字符串时,会自动寻找最短的十进制数——这个十进制数转成二进制浮点数后,和底层存储的近似值完全相等。2.4刚好符合这个条件,所以print直接输出这个简洁的表示,而不是底层的精确存储值。

而Decimal(2.4)的行为不同:Decimal构造函数会精准读取浮点数底层存储的二进制近似值,然后把它完整转换成十进制数,不会做任何舍入优化,所以就显示出了那个很长的真实存储值。

举个验证例子:

from decimal import Decimal

# 输出浮点数2.4的真实存储值
print(Decimal(2.4))
# 输出经过优化的最短等价十进制表示
print(2.4)

如果想让Decimal得到精确的2.4,应该用字符串作为参数,比如Decimal("2.4"),这样就会直接解析十进制的精确值,而不是读取浮点数的近似存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:04:57