PHP字符串数,比较与零的混淆';s

PHP字符串数,比较与零的混淆';s,php,Php,为什么在字符串比较中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{ prin

为什么在字符串比较中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;
?>
我在哪里搞砸了?我确信这是我的错,我只是不知道在哪里。。。 我也试过了,没有打字,结果一样

编辑:
尝试测试,实际的源代码显示在那里

为什么在字符串比较中0等于0.0

因为数字字符串(即满足
的字符串是_numeric()
)首先转换为数字并进行数字比较。您还需要使用identity操作符(
==
)来比较类型


参考:

您说您“也尝试过,但没有使用类型转换”-但是使用字符串转换(即
(string)
)并不能避免“类型转换”-在您的示例中,它们已经是字符串,因此在这种情况下类型转换是多余的。@w3d:thas是正确的,但因为它没有给出我期望的结果,我也尝试了转换,无结果:)谢谢!当它第一次引入PHP时,我经常这样做,但我完全忘记了它。我在examplepage()中的代码中添加了此更正,以供将来参考如果您想要强制执行字符串比较,也可以使用PHP函数-这可能比
==
更容易阅读。
?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???