5

「==」を使用して文字列でいくつかのテストを行いました。文字列 '==' を比較する方法ではないことはわかっていますが、解決したい奇妙な動作があります。

このページの PHP ドキュメントに従っています: http://www.php.net/manual/en/language.operators.comparison.php。これは私が行ったテストです

<?php 
   var_dump( "100" == "1e2" ); //outputs boolean true
   var_dump( (int) "100" ); //int 100
   var_dump( (int) "1e2" ); //int 1
?> 

ドキュメントによると、文字列を数値と比較すると、PHP は最初に文字列を数値に変換しますが、'100' と '1e2' を数値に変換すると、それらは等しくありません。比較は、ブール型の false を出力する必要があります。

この奇妙な動作はなぜですか?ありがとう!

4

2 に答える 2

6

すべての数値が整数であるとは限りません。1e2float です (たまたま整数として表現できますが、直接整数に変換することはできません)。floats ではなく sに変換してみてくださいint:

<?php 
   var_dump( "100" == "1e2" ); // bool(true)
   var_dump( (float) "100" );  // float(100)
   var_dump( (float) "1e2" );  // float(100)
?> 
于 2012-07-15T05:00:58.280 に答える
1

タイプジャグリングはタイプキャスティングと同じではありません

タイプジャグリングのページより

いずれかのオペランドが float の場合、両方のオペランドが float として評価され、結果は float になります。それ以外の場合、オペランドは整数として解釈され、結果も整数になります。

于 2012-07-15T05:07:45.900 に答える