【发布时间】:2021-11-11 18:13:10
【问题描述】:
我正在阅读 Python Decimal 模块。我需要进行大量精确的计算,通常有很多小数位,随着时间的推移,少量的偏差会增加。进入十进制库。
第1步:阅读the intro to Decimal library(加粗):
- 可以精确表示小数。相反,像 1.1 和 2.2 这样的数字在二进制浮点中没有精确的表示。最终用户通常不会期望
1.1 + 2.2显示为 3.3000000000000003,因为它使用二进制浮点数。
第 2 步:将小数插入 Python。这似乎不精确 - 与浮点计算的差值非常相似。
>>> from decimal import *
>>> 1.1 + 2.2
3.3000000000000003
>>> Decimal(3.3)
Decimal('3.29999999999999982236431605997495353221893310546875')
发生了什么事?
【问题讨论】:
-
仔细阅读文档。当您将
float对象传递给Decimal构造函数时,您认为会发生什么? -
您可能需要算法来减少精度误差。
-
@Juanpa 谢谢,我意识到我的错误
-
Decimal 格式只能精确计算出十进制结果,即可以表示为十进制数字的结果。如果您超过了它支持或设置的位数,或者如果您执行的任何计算结果无法以十进制数字表示,例如深奥的 1/3,则其精度的行为与其他数字格式一样。
标签: python decimal precision floating-accuracy