remove - PHP expresa dos cadenas diferentes para ser el mismo
remove html tags php (6)
Posible duplicado:
php == vs === operador
¿En qué se diferencian los operadores de comparación de igualdad (== doble igual) e identidad (=== triple igual)?
¿Por qué la siguiente afirmación es true
?
"608E-4234" == "272E-3063"
También he intentado esto con comillas simples alrededor de las cuerdas. La única forma en que puedo hacer que se evapore a false
es usando el operador ===
lugar de ==
Supongo que PHP lo está tratando como una especie de ecuación, pero parece un poco extraña.
¿Alguien puede elaborar?
Creo que PHP lee esto como una sintaxis científica, que se traducirá como:
608 x 10^-4234 == 272 x 10^-3063
PHP interpreta esto como 0 = 0
.
Esto es lo que está viendo:
http://www.wolframalpha.com/input/?i=608E-4234&dataset=
http://www.wolframalpha.com/input/?i=272E-3063
Como no encajan en la variable, ambos equivalen a 0, o cualquier valor predeterminado que php elija, y por lo tanto son equivalentes.
PHP está comparando esas cadenas como números de coma flotante, y ambas son cero, por lo que DEBE usar el operador ===
,
PHP usa IEEE 754 para flotantes, y sus números son tan pequeños que evalúan a 0.
Ver: 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
"608E-4234"
es el formato de número flotante , por lo que se convertirá en número cuando se comparen.
608E-4234
y 272E-3063
ambos float(0)
porque son demasiado pequeños.
Para ==
en php,
Si compara un número con una cadena o la comparación implica cadenas numéricas , cada cadena se convierte en un número y la comparación se realiza numéricamente.
http://php.net/manual/en/language.operators.comparison.php
Atención:
¿Qué pasa con el comportamiento en javascript que también tiene ambos ==
y ===
?
La respuesta es que el comportamiento es diferente de PHP. En javascript, si compara dos valores con el mismo tipo, ==
es exactamente igual que ===
, por lo que no se producirá el reparto para compararlo con dos valores del mismo tipo.
En 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)
Por lo tanto, en javascript, cuando conozca el tipo de resultado, podría usar ==
lugar de ===
para guardar un carácter.
Por ejemplo, el operador typeof
siempre devuelve una cadena, por lo que podría usar
typeof foo == ''string''
lugar de typeof foo === ''string''
sin daño.