Я просто задавался вопросом, почему мое заявление 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.
Еще: почему !?
Поскольку научная нотация - это плавающий тип в php, а не целочисленный тип. –
http://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp?rq=1 –
Да, === проверяет наличие одно и то же значение. 1e2 является двойным, 100 является целым числом, поэтому они не являются одним и тем же типом. –