sugar84 发表于 2022-5-4 20:59:04

很初级但又很奇怪的问题

4.0==4
比较出的结果难道不是False吗?
4.0是浮点数
4是整数
类型都不同,为什么运行后是True?

isdkz 发表于 2022-5-4 21:00:44

== 是比较他们的值的,不考虑类型,

这个是在 __eq__ 魔法方法里面实现的逻辑

柿子饼同学 发表于 2022-5-4 22:14:22

可是他们的值是相等的吧

sugar84 发表于 2022-5-4 22:38:46

柿子饼同学 发表于 2022-5-4 22:14
可是他们的值是相等的吧

4.0 和 4的值不一样

sugar84 发表于 2022-5-4 22:40:19

isdkz 发表于 2022-5-4 21:00
== 是比较他们的值的,不考虑类型,

这个是在 __eq__ 魔法方法里面实现的逻辑

比较的是哪个值呀 懵。 我用id查值也不相同呀

isdkz 发表于 2022-5-4 22:42:57

sugar84 发表于 2022-5-4 22:40
比较的是哪个值呀 懵。 我用id查值也不相同呀

id 查的是地址,他们的值肯定是数学的那个值呀,

数学上比较一个数是否相等用的是差值,差值为 0 即相等,

4.0 - 4 不就为 0 吗?

sugar84 发表于 2022-5-4 23:12:28

isdkz 发表于 2022-5-4 22:42
id 查的是地址,他们的值肯定是数学的那个值呀,

数学上比较一个数是否相等用的是差值,差值为 0 即相 ...

如果==是比较值的话
‘4.0’==4
为什么返回又是False

hgh456hgh 发表于 2022-5-4 23:20:09

sugar84 发表于 2022-5-4 23:12
如果==是比较值的话
‘4.0’==4
为什么返回又是False

'4.0'是字符串 类型不一样了
浮点数存储好像分两个部分 整数部分和浮点部分 当整数部分值一致 而浮点部分为0时,系统默认其相等

isdkz 发表于 2022-5-4 23:28:18

sugar84 发表于 2022-5-4 23:12
如果==是比较值的话
‘4.0’==4
为什么返回又是False

字符串能跟数字一样吗?

sugar84 发表于 2022-5-5 01:33:12

hgh456hgh 发表于 2022-5-4 23:20
'4.0'是字符串 类型不一样了
浮点数存储好像分两个部分 整数部分和浮点部分 当整数部分值一致 而浮点部 ...

你这样说的话 。。。我可以理解了~

sugar84 发表于 2022-5-5 01:35:15

isdkz 发表于 2022-5-4 23:28
字符串能跟数字一样吗?

我知道‘4.0’ == 4 去比较肯定是False 类型不一样,一个是字符串 一个是整数
但回到上面 4.0==4 类型也不一样啊 4.0是浮点数, 4是整数,怎么这个相比就比值了,
‘4.0’==4 这个相比就比类型了?

isdkz 发表于 2022-5-5 05:45:15

本帖最后由 isdkz 于 2022-5-5 05:47 编辑

那你怎么就不想一下浮点数 4.0跟 整数4的类型不一样,但是他们可以进行加减,

字符串 "4.0" 跟 整数4 可以加减吗?

wp231957 发表于 2022-5-5 07:12:18

isdkz 发表于 2022-5-5 05:45
那你怎么就不想一下浮点数 4.0跟 整数4的类型不一样,但是他们可以进行加减,

字符串 "4.0" 跟 整数4 可 ...

但是c里面就不可以比较了吧

isdkz 发表于 2022-5-5 07:15:06

wp231957 发表于 2022-5-5 07:12
但是c里面就不可以比较了吧

c 里面也没有字符串类型吧

wp231957 发表于 2022-5-5 07:22:52

isdkz 发表于 2022-5-5 07:15
c 里面也没有字符串类型吧

不是这个,是c里面4.0和4并不恒等?!

isdkz 发表于 2022-5-5 07:42:40

wp231957 发表于 2022-5-5 07:22
不是这个,是c里面4.0和4并不恒等?!

在 c 里面 4.0 和 4 的值也是相等的吧

wp231957 发表于 2022-5-5 12:47:23

isdkz 发表于 2022-5-5 07:42
在 c 里面 4.0 和 4 的值也是相等的吧

确实
printf("%d\n",4.0==4.0);
   printf("%d\n",4==4.0);
这两个都是返回true

sugar84 发表于 2022-5-5 12:58:17

isdkz 发表于 2022-5-5 05:45
那你怎么就不想一下浮点数 4.0跟 整数4的类型不一样,但是他们可以进行加减,

字符串 "4.0" 跟 整数4 可 ...

感谢isdkz的耐心解答,思路基本理清楚了,
我可能有点钻牛角尖了。

临时号 发表于 2022-5-5 13:38:11

==是比较对象的值是否相等,如果你想要比较类型可以用is
页: [1]
查看完整版本: 很初级但又很奇怪的问题