在 python 3.5 中,我只是在玩比较运算符并遇到了这个(看起来)奇怪的情况。
小数点后的零数量是否存在阈值,超过该阈值解释器会因为浮点值固有的不准确性而决定不考虑相关值?
最佳答案
简而言之,在解析输入完成的阶段,Python 需要将输入转换为 C double
,然后再将其转换为 Python float
。输入更多than 16 decimal digits将得到近似值,5.0000000000000001
近似于 5.0
:
>>> 5.0000000000000001
5.0
因此,比较 5 == 5.0000000000000001
将成功(5
将转换为等于 5.0
的 Python float > 以便进行比较)。
对于小于前述的数字,结果(可以表示)并且不言而喻:
>>> 5.000000000000001
5.000000000000001
是的,不幸的是,正如我在对该问题的最初评论中所想的那样,float_richcompare
与此行为无关。这一切都发生在它被调用之前。
关于python - 为什么 5 != 5.0000000000000000001 为假,而 5 != 5.00000001 为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271491/