首页 > 解决方案 > 为什么 print(2 == 2.) 在 Python 中返回 True

问题描述

为什么print(2 == 2.)返回True

根据我的理解2是整数并且2.0是浮点数。它们在内存中的存储方式不同。

我认为它正在返回True,因为它们都属于同一类integer class

我经历了类似的堆栈溢出问题,但我仍然不清楚概念。有人可以解释一下吗?

标签: pythonfloating-pointinteger

解决方案


内存表示实际上与它没有任何关系(或者至少,它不会阻止某些整数与等效实数进行比较)。

2 == 2.由 实现int.__eq__(2, 2.),它被定义为通过进行适当的类型转换来处理整数/浮点比较。由于int是比 , 更“窄”的类型float2因此首先将其转换为浮点值。(作为一个实现细节,我怀疑这是通过int.__eq__调用来完成的,float.__eq__(2., 2)并且在那里完成了转换,而不是int类型知道有关如何表示浮点值的任何特定细节。)

请注意,并非每个 int都可以精确地表示为浮点值,因为int它使用任意精度但是float是固定的。例如,在我的机器上

>>> 2000000000000000000000000000000000 == 2000000000000000000000000000000000.
False

(我复制粘贴了整数以生成浮点文字,因此 0 排成一行。)


推荐阅读