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

并非所有数字都是整数。1e2是一个浮点数(恰好可以表示为整数,但不能直接转换为整数)。尝试转换为floats 而不是ints:

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

Type Juggling不等于Type Casting

从 Type Juggling 页面

如果任一操作数是浮点数,则这两个操作数都被计算为浮点数,结果将是浮点数。否则,操作数将被解释为整数,结果也将是整数。

于 2012-07-15T05:07:45.900 回答