2016-11-07 8 views
-1

Я просто задавался вопросом, почему мое заявление if не было введено при использовании научной нотации, то есть 1e2 вместо 100 и 1e6 вместо 1000000.Почему научная нотация не идентична целому числу в php?

Оказывается, те только равны и не одинаковы, как видно по следующему коду:

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

У меня есть run it on different php versions и, кажется, по крайней мере, быть последовательным, поскольку такое поведение же через: 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.

Еще: почему !?

+3

Поскольку научная нотация - это плавающий тип в php, а не целочисленный тип. –

+1

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

+1

Да, === проверяет наличие одно и то же значение. 1e2 является двойным, 100 является целым числом, поэтому они не являются одним и тем же типом. –

ответ

1

=== оператор, в php, рассмотрим тип операндов. 1e2 даже вернуть float номер, а 100 - целое число. , поэтому он равен значениям (==), но не в типах (===).