2

这是我的输入:

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

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

4

2 回答 2

3

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

于 2013-10-05T21:29:31.693 回答
2

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

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

于 2013-10-05T21:30:19.287 回答