你比较下这两个的结果就知道了
<?php
$a=0.6; 
$b=0.3; 
$c=0.1; 
$d=$a+$b+$c; 
echo $d;
if($d != float(1)) 

echo $d.' <br>'; 

?>
<?php
$a=0.6; 
$b=0.3; 
$c=0.1; 
$d=$a+$b+$c; 
echo $d;
if($d != 1) 

echo $d.' <br>'; 

?>

解决方案 »

  1.   

    $a=0.6;
    $b=0.3;
    $c=0.1;$d=$a+$b+$c;echo $d.' <br>';if ($d ===1) {
        echo 'd=1 <br>';
    } else {
        var_dump($d);
    }
      

  2.   

    zmouki  float()报错
    <?
    $a=0.5;
    $b=0.3;
    $c=0.2;
    $d=$a+$b+$c;
    echo $d.'<br>';
    if($d!=1)
    {
    echo $d.'<br>';
    }
    ?>
    可是上面的代码我改了一下数值
    输出却是(只有一个1)
    1
      

  3.   

    比较运算符!= : $a !== $b 如果 $a 不等于 $b,或者它们的类型不同。返回true
      

  4.   

    可是
    $a=0.5;
    $b=0.3;
    $c=0.2; 

    $a=0.6;
    $b=0.3;
    $c=0.1; 
    有什么区别,结果相反啊
      

  5.   

    <?
    $a=0.6;
    $b=0.3;
    $c=0.1;
    $d=$a+$b+$c;
    echo $d.'<br>';
    if($d!=(float)1)
    {
    echo $d.'<br>';
    }
    ?>
    这样也是
    1
    1

    $a=0.5;
    $b=0.3;
    $c=0.2;  
    就是
    1
      

  6.   

    或者你就写成,这样能保险点,至于刚才那个问题,等待高手吧!
    <?php
    $a=0.6; 
    $b=0.3; 
    $c=0.1; 
    $d=$a+$b+$c; 
    echo $d;
    if($d !==1) 

    echo $d.' <br>'; 

    ?>
      

  7.   

    这个问题我已经被折磨我已经服了
    if($d !==1) 也不行
    其实我要判断这些数的和是不是1$a=60; 
    $b=30; 
    $c=10; 
    $d=$a+$b+$c; 
    echo $d;
    if($d !=100) 

    echo $d.' <br>'; 

    这样就行了
    之后在每个除100倒霉这个魔数被我碰上了
      

  8.   

    <?
    $a=0.6;
    $b=0.3;
    $c=0.1;
    $d=$a+$b+$c;
    $e=0.5;
    $f=0.3;
    $g=0.2;
    $h=$e+$f+$g;
    echo var_dump($d).'<br>';
    echo var_dump($h).'<br>';
    if($d==$h)
    {
    echo 'd==h'.'<br>';
    }
    if($d===$h)
    {
    echo 'd===h'.'<br>';
    }
    if($d!=$h)
    {
    echo 'd!=h'.'<br>';
    }
    if($d!==$h)
    {
    echo 'd!==h'.'<br>';
    }
    ?>
    输出float(1) 
    float(1) 
    d!=h
    d!==h
    有意思
      

  9.   

    <?php 
    $a=0.2; 
    $b=0.7; 
    $c=0.1; 
    $d=$a+$b+$c; 
    echo $d.' <br>'; 
    if($d!=1) 

    echo $d.' <br>'; 

    ?>1
    1
      

  10.   

    <?php 
    $a=0.6; 
    $b=0.3; 
    $c=0.1; 
    $d=$a+$b+$c; 
    echo var_dump($d)."<br>";//结果:float(1)$a = 1;
    echo var_dump($a)."<br>";//结果:int(1)$a = settype($a,"float");//$a类型转化为floatif($d != $a){
         echo $d;
    }
    ?>进行比较的两个变量类型不一样,并且!=为模糊比较,是否由此原因造成比较异常,思考 
      

  11.   


    $a=0.6; 
    $b=0.3; 
    $c=0.1; 
    $d=$a+$b+$c; 
    var_dump($d);
    if(!$d==1) 

    echo $d.' <br>'; 

      

  12.   

    从PHPX.net得到的答案浮点数精度
    显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。原帖地址