Double Possible:
php == vs === opérateur
Comment faire de l'égalité (== égal double) et d'identité (=== triple égal) les opérateurs de comparaison diffèrent-ils?Pourquoi la déclaration suivante de retour
true
?"608E-4234" == "272E-3063"
J'ai aussi essayé avec des guillemets simples autour de chaînes de caractères. La seule façon que je peux le faire pour evaulate d'
false
est par l'utilisation de l'===
opérateur au lieu de==
Ma conjecture est que PHP est de le traiter comme une sorte d'équation, mais il semble un peu étrange.
Quelqu'un peut-il développer?
Réponses
Trop de publicités?"608E-4234"
est le flotteur format de nombre, de sorte qu'ils seront exprimés en nombre lorsqu'ils se compare.
608E-4234
et 272E-3063
seront float(0)
parce qu'ils sont trop petits.
Pour ==
en php,
Si vous comparez un nombre avec une ficelle ou la comparaison implique des chaînes numériques, puis chaque chaîne est convertie en un nombre et de la comparaison effectuée numériquement.
http://php.net/manual/en/language.operators.comparison.php
À l'Attention de:
Quel est le comportement en javascript qui possède également les deux ==
et ===
?
La réponse est le comportement est différent de PHP. En javascript, si vous comparez deux valeur de même type, ==
est juste comme ===
, donc de type cast ne se produira pas pour comparer avec les deux même type de valeurs.
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)
Donc en javascript, si vous connaissez le type du résultat, vous pouvez utiliser ==
au lieu de ===
pour sauver un personnage.
Par exemple, typeof
opérateur renvoie toujours une chaîne de caractères, de sorte que vous pouvez simplement utiliser
typeof foo == 'string'
au lieu de typeof foo === 'string'
avec pas de mal.
PHP utilise IEEE 754 pour les flottants, et vos nombres sont si petits qu'ils sont évalués à 0.
Voir: 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