Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这是我的输入:
>>> from decimal import Decimal >>> Decimal('114.3') Decimal('114.3') >>> Decimal(114.3) Decimal('114.2999999999999971578290569595992565155029296875')
我认为 Decimal 的这两个实例必须相等,但带有 float arg 的 Decimal 似乎失去了精度。为什么是这样?我的python版本是2.7.3。提前致谢!
当你这样做时Decimal(114.3),你正在创建一个常规的浮点对象,然后将它传递给 Decimal。在创建浮点数 114.3 时,由于二进制浮点不精确,精度会在 Decimal 看到它之前丢失。没有办法恢复这种准确性。这就是 Decimal 接受字符串表示形式作为输入的原因,因此它可以查看您实际键入的内容并使用正确的精度级别。
Decimal(114.3)
第二行给出了二进制浮点数的精确十进制值,近似于 114.3。这几乎都是关于二进制浮点的,而不是关于十进制的。有关详细信息,请参阅文档。
稍后:如果使用 Python 3,请参阅这些文档。基本相同,但 Python 3 有更多工具可以帮助您“像这样”探索案例。