为什么python decimal.decimal精度与Equalable参数不同?

为什么python decimal.decimal精度与Equalable参数不同?,python,decimal,Python,Decimal,以下是我的意见: >>> from decimal import Decimal >>> Decimal('114.3') Decimal('114.3') >>> Decimal(114.3) Decimal('114.2999999999999971578290569595992565155029296875') 我认为这两个十进制实例必须相等,但带float arg的十进制似乎失去了精度。为什么会这样?我的python版本是2.7.3

以下是我的意见:

>>> from decimal import Decimal
>>> Decimal('114.3')
Decimal('114.3')
>>> Decimal(114.3)
Decimal('114.2999999999999971578290569595992565155029296875')

我认为这两个十进制实例必须相等,但带float arg的十进制似乎失去了精度。为什么会这样?我的python版本是2.7.3。提前谢谢

当您执行
Decimal(114.3)
时,您正在创建一个常规浮点对象,然后将其传递给Decimal。在创建浮点114.3时,由于二进制浮点的不精确性,在十进制数看到它之前,精度就会丢失。没有办法恢复这种准确性。这就是Decimal接受字符串表示作为输入的原因,因此它可以查看您实际键入的内容并使用正确的精度级别。

第二行给出的是二进制浮点数的精确十进制值,约为114.3。这几乎都是关于二进制浮点的,而不是关于十进制的。有关详细信息,请参阅

稍后:如果使用Python 3,请参见。同样的基本问题,但是Python 3有更多的工具来帮助您探索“像这样”的案例。

精度级别与此无关。