PHP表示两个不同的string是相同的
可能重复:
php == vs ===运算符
等号(== double等于)和identity(=== triple等于)比较运算符有什么不同?
为什么下面的语句返回true
?
"608E-4234" == "272E-3063"
我也试过用单引号围绕string。 唯一的办法,我可以让它蒸发到false
是通过使用===
运算符而不是==
我的猜测是PHP将其视为某种方程,但似乎有点奇怪。
有人可以详细说明吗?
"608E-4234"
是浮点数格式 ,所以在比较的时候会把它们转换成数字。
608E-4234
和272E-3063
都会float(0)
因为它们太小。
对于在PHP中,
如果您将数字与string进行比较,或者比较涉及数字string ,则将每个string转换为数字,并以数字forms进行比较。
http://php.net/manual/en/language.operators.comparison.php
注意:
那么在JavaScript中也有==
和===
呢?
答案是行为不同于PHP。 在javascript中,如果您比较两个值相同的types, ==
与===
相同,所以types转换不会发生与两个相同的types值比较。
在javascript中:
608E-4234 == 272E-3063 // true 608E-4234 == "272E-3063" // true "608E-4234" == 272E-3063 // true "608E-4234" == "272E-3063" // false (Note: this is different form PHP)
所以在JavaScript中,当你知道结果的types时,可以使用==
代替===
来保存一个字符。
例如, typeof
运算符总是返回一个string,所以你可以使用
typeof foo == 'string'
而不是typeof foo === 'string'
没有任何伤害。
PHP使用IEEE 754浮点数,你的数字是如此之小,他们evalue 0。
请参阅: http : //en.wikipedia.org/wiki/IEEE_floating_point
Name Common name Base Digits E min E max binary32 Single precision 2 23+1 −126 +127 binary64 Double precision 2 52+1 −1022 +1023
我认为,PHP将其视为一种科学语法,将被翻译为:
608 x 10^-4234 == 272 x 10^-3063
PHP将其解释为0 = 0
。
PHP将这些string作为浮点数进行比较,它们都是零,所以您必须使用===
运算符,
我正在回答。 如果您使用的是“===”,那么您还需要检查types而不是值。 如果你使用“==”,你只需检查值是否相同。
你可以参考这里和这里 。
这是它所看到的:
http://www.wolframalpha.com/input/?i=608E-4234&dataset=
http://www.wolframalpha.com/input/?i=272E-3063
因为它们不适合variables,所以它们都等于0,或者phpselect的任何默认值,因此是等价的。