python - 为什么 print(2 == 2.) 在 Python 中返回 True
问题描述
为什么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 排成一行。)
推荐阅读
- python-3.x - 使用 Google Cloud Endpoints 时如何重启 Flask 服务器?
- google-apps-script - Google App Script 能否通过链接下载压缩的 csv 文件并解析该 CSV?
- sql - SQL中的MAX函数返回不是最大值
- tcl - 如何在 Synopsys DVE 下运行的 Tcl 脚本中打印(放入日志)信号值?
- html - 移动只有相等的css-float div之间的空白空间
- r - R中的模糊外连接/合并
- outlook - 桌面 Outlook 插件登录问题 - 13003“不支持用户身份类型”
- android - 我自己的库中依赖项的 api 或实现?
- c# - UWP 绑定到 ConverterParameter 不起作用
- spring-mvc - 源服务器没有找到目标的当前表示或不愿意透露存在