Je me demandais juste pourquoi mon instruction if n'a pas été entrée lors de l'utilisation de la notation scientifique, c'est-à-dire 1e2
au lieu de 100
et 1e6
au lieu de 1000000
.Pourquoi la notation scientifique n'est-elle pas identique à l'entier en php?
Il se trouve, ce sont seulement égaux et non identiques, comme on le voit par le code suivant:
<?php
echo "Integer: " . 100; // prints 100
echo "\n";
echo "Scientific notation: " . 1e2; // prints 100
echo "\n";
echo "Equality: ";
if(100 == 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Equality: as expected"
echo "\n";
echo "Identity: ";
if(100 === 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Identity: wtf php"
Je run it on different php versions et il semble au moins être cohérent, que ce comportement est le même pour: 4.3.0 - 5.0.5, 5.1.1 - 5.6.27, hhvm-3.10.0 - 3.13.2, 7.0.0 - 7.1.0RC5.
Pourtant: Pourquoi !?
Parce que la notation scientifique est un type flottant en PHP, pas un type entier. –
http://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp?rq=1 –
Oui, le === vérifie le même valeur et même type. 1e2 est un double, 100 est un entier donc ils ne sont pas du même type. –