PHP表示两个不同的字符串是相同的

可能重复:
php == vs ===运算符
比较运算符的等式(== double等于)和identity(=== triple等于)如何不同?

为什么下面的语句返回true

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

我也尝试过用单引号围绕字符串。 我可以通过使用===运算符而不是==来让它蒸发为false

我的猜测是PHP将它视为某种等式,但它似乎有点奇怪。

有人可以详细说明吗?


"608E-4234"是浮点数格式,因此它们在比较时会被转换为数字。

608E-4234272E-3063都会float(0)因为它们太小。

对于在PHP中==

如果您将数字与字符串进行比较或者比较涉及数字字符串 ,则将每个字符串转换为数字,并以数字形式进行比较。

http://php.net/manual/en/language.operators.comparison.php

注意:

那么javascript中的行为也有=====两种情况呢?

答案是行为与PHP不同。 在javascript中,如果你比较两个值相同的类型, =====相同,所以类型转换不会发生与两个相同类型值的比较。

在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中,当您知道结果的类型时,可以使用==代替===来保存一个字符。

例如, typeof运算符总是返回一个字符串,所以你可以使用

typeof foo == 'string'而不是typeof foo === 'string'没有任何伤害。


PHP使用IEEE 754浮点数,而且你的数字非常小,所以它们的值为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

链接地址: http://www.djcxy.com/p/37765.html

上一篇: PHP expresses two different strings to be the same

下一篇: Get first element in array with index not starting from 0