为什么python decimal.Decimal precision与equable args不同?

时间:2013-10-05 21:27:49

标签: python decimal

以下是我的意见:

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

我认为这两个Decimal实例必须相等,但带有float arg的Decimal似乎松散了。为什么是这样?我的python版本是2.7.3。提前谢谢!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

稍后:如果使用Python 3,请参阅these docs。同样基本的东西,但Python 3有更多工具可以帮助您探索“像这样”的案例。