PHP字符串数字比较弄乱零

时间:2014-03-05 10:05:31

标签: php

为什么在STRING比较中0等于0.0?

<?php
    isset($_GET['temp'])?$temp=$_GET['temp']:$temp=0;
    if($temp == 0) {
        if ((string) $_GET['temp']==(string) '0.0'){
            $temp=0.01;
            print '='.$_GET['temp'].'=';
        }else{
            print '-'.$_GET['temp'].'-';
        }
    }else{
        print '+'.$_GET['temp'].'+';
    }
    print $temp;
?>

打印值为:

?temp=1    +1+1         (as expected)
?temp=0.0  =0.0=0.01    (as expected)
?temp=z    -z-z         (as expected)
?temp=0    =0=0.01      Wait...WHAT???

我搞砸了哪里?我确定是我的错,我只是看不到... 我尝试了它也没有打字,同样的结果......

编辑:
尝试http://test.youp.net/stringcomparetest.php?temp=0进行测试,显示实际的源代码。

1 个答案:

答案 0 :(得分:1)

  

为什么在STRING比较中0等于0.0?

因为数字字符串(即满足is_numeric())首先被转换为数字并进行数字比较。您还需要使用标识运算符(===)来比较类型。

参考:PHP Comarison Operators