2016-11-07 2 views
-1

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 !?

+3

Parce que la notation scientifique est un type flottant en PHP, pas un type entier. –

+1

http://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp?rq=1 –

+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. –

Répondre

1

=== opérateur, en php, considérons le type des opérandes. 1e2 même retourner un float nombre, et 100 est un nombre entier. donc, il est égal à des valeurs (==), mais pas dans les types (===).