>>> from decimal import Decimal
>>> Decimal('0.3637') * (Decimal('1') / Decimal('0.9323')) == Decimal('0.3637') / Decimal('0.9323')
False
为什么?
我认为十进制模块解决了浮点运算中的舍入问题。 如何在Python中检查两个十进制数的相等性?
答案 0 :(得分:0)
<强>观察强>
操作顺序对于理解为什么您看到结果至关重要:
from decimal import Decimal as D
D('0.3637') * (D('1') / D('0.9323')) == D('0.3637') / D('0.9323')
# False
(D('0.3637') * D('1')) / D('0.9323') == D('0.3637') / D('0.9323')
# True
<强>解释强>
原因是given here,摘录如下。十进制算术仍然是基本上有限的精度。
你可以,如果对你很重要,应该使用getcontext().prec
降低精确度。有关详细信息,请参阅decimal
documentation。
一般来说,十进制可能会过火而且仍然会有 在极少数情况下舍入错误时数字没有限制 十进制表示(例如分母的任何分数 不是1或可被2或5整除 - 小数基数的因子 (10))。
<强>解决方案强>
对于花车的一般比较:
<强> What is the best way to compare floats for almost-equality in Python? 强>