2016-11-07 4 views
-1

1000000 대신 1001e6 대신 1e2과 같이 과학 표기법을 사용할 때 if 문을 입력하지 않은 이유가 궁금했습니다.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는 double이며 100은 정수이므로 같은 유형이 아닙니다. –

답변

1

=== 연산자는 PHP에서 피연산자 유형을 고려합니다. 1e2float 수를 반환하고 100은 정수입니다. 이므로 값 (==)은 같지만 유형 (===)은 같지 않습니다.