为什么print(2 == 2.)
返回True
根据我的理解2
是整数并且2.0
是浮点数。它们在内存中的存储方式不同。
我认为它正在返回,True
因为它们都属于同一类integer class
?
我经历过类似的堆栈溢出问题,但概念对我来说仍然不清楚。有人可以解释一下吗?
内存表示与它没有任何关系(或者至少,它不会阻止某些整数与等效实数进行比较)。
2 == 2.
由 实现int.__eq__(2, 2.)
,它被定义为通过进行适当的类型转换来处理整数/浮点比较。由于int
是比 更“窄”的类型float
,2
因此首先转换为浮点值。(作为一个实现细节,我怀疑这是通过int.__eq__
调用完成的,float.__eq__(2., 2)
并在那里完成转换,而不是int
知道有关如何表示浮点值的任何特定细节的类型。)
请注意,并非每个 int
都可以精确地表示为浮点值,因为int
使用任意精度但是float
固定的。例如,在我的机器上
>>> 2000000000000000000000000000000000 == 2000000000000000000000000000000000.
False
(我复制粘贴了整数以生成浮点文字,因此 0 对齐。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句