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

时间:2012-09-26 09:17:57

标签: php string

  

可能重复:
  php == vs === operator
  How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?

为什么以下语句会返回true

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

我也尝试过用字符串周围的单引号。我可以通过使用false运算符代替===

来获得==的唯一方法

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

任何人都可以详细说明吗?

6 个答案:

答案 0 :(得分:107)

"608E-4234"float number format,因此在比较时会将其转换为数字。

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'没有任何伤害。

答案 1 :(得分:20)

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       

答案 2 :(得分:13)

我认为PHP将其读作科学语法,将其翻译为:

608 x 10^-4234 == 272 x 10^-3063 

PHP将此解释为0 = 0

答案 3 :(得分:10)

PHP将这些字符串作为浮点数进行比较,它们都为零,因此必须使用===运算符,

答案 4 :(得分:5)

我想回答。 如果您使用的是“===”,则还要检查类型而不是值。 如果您使用“==”,则只需检查值是否相同。

您可以参考herehere

答案 5 :(得分:3)

这就是它所看到的:
http://www.wolframalpha.com/input/?i=608E-4234&dataset=
http://www.wolframalpha.com/input/?i=272E-3063

因为它们不适合变量,它们都等于0,或者php选择的默认值,因此是等价的。