PHP表示两个不同的string是相同的

可能重复:
php == vs ===运算符
等号(== double等于)和identity(=== triple等于)比较运算符有什么不同?

为什么下面的语句返回true

 "608E-4234" == "272E-3063" 

我也试过用单引号围绕string。 唯一的办法,我可以让它蒸发到false是通过使用===运算符而不是==

我的猜测是PHP将其视为某种方程,但似乎有点奇怪。

有人可以详细说明吗?

"608E-4234"是浮点数格式 ,所以在比较的时候会把它们转换成数字。

608E-4234272E-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的任何默认值,因此是等价的。