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

PHP expresses two different strings to be the same

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
php == vs === operator
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?

为什么下面的语句返回true

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

我也尝试过用单引号括住字符串。我唯一能得到它的方法是使用===操作符而不是==操作符。

我猜是PHP把它当作某种等式,但它看起来有点奇怪。

有人能详细解释一下吗?


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

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

对于php中的==

If you compare a number with a string or the comparison involves
numerical strings, then each string is converted to a number and the
comparison performed numerically.

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

注意:

在同时拥有=====的javascript中的行为如何?

答案是行为不同于PHP。在javascript中,如果将两个值与同一类型进行比较,则=====相同,因此与两个相同类型的值进行比较时不会发生类型转换。

在JavaScript中:

1
2
3
4
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运算符总是返回一个字符串,因此您只需使用

以东十一〔12〕而不是以东十一〔13〕无害。


PHP使用IEEE754作为浮点数,您的数字太小,以至于它们的值为0。

参见:http://en.wikipedia.org/wiki/ieee_floating_point

1
2
3
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将此理解为一种科学的语法,它将被翻译为:

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

php将其解释为0 = 0


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


我在试着回答。如果使用"==",还可以检查类型而不是值。如果使用"==",只需检查值是否相同。

你可以在这里和这里引用。


这就是它所看到的:http://www.wolframalpha.com/input/?I=608E-4234&数据集=http://www.wolframalpha.com/input/?I=27 2E-3063

因为它们不适合变量,所以它们都等于0,或者PHP选择的任何默认值,因此是等效的。