浮动数据比较行为在PHP?

时间:2018-09-10 10:17:55

标签: php comparison

我在带有float的php中有一个非常奇怪的行为。 我用一个函数设置了2个变量$ finalttc和$ totalTtc。 此功能如下

$finalttc = ttc(rem(3584.03,30),10);  
$totalTtc=  ttc(rem(3584.03,30),10);

3580.43是从不同来源设置的,但这是数据库中相同的数据...(数字行的总和)

这是功能

function ttc($tarifHt, $tva) {
       $ttc = round (  ((($tarifHt/100)*$tva) + $tarifHt), 3) ;           
    return round (  $ttc, 2,PHP_ROUND_HALF_EVEN); 
}

 function rem($prix,$remise=0) { 
     if ($remise == 0) {
         return $prix;
     } else {         
          $r = round( ($prix-(($prix/100)*$remise))  ,3 );
         $r = round( $r , 2,PHP_ROUND_HALF_ODD );
        return $r;
     }
}

我这样测试

 echo 'diff ttc '.((float)$finalttc).' '.(float)$totalTtc.'<br />';
 var_dump(((float)$finalttc) != ((float)$totalTtc) );

 echo 'diff ttc trim'.trim((float)$finalttc).' '.(float)$totalTtc.'<br />';
 var_dump(trim((float)$finalttc) != trim((float)$totalTtc) ); 

 echo  base64_encode((float)$finalttc).' '.base64_encode((float)$totalTtc).'<br />';                
 var_dump(base64_encode((float)$finalttc) != base64_encode((float)$totalTtc));

 echo decbin((float)$finalttc).' '.decbin((float)$totalTtc).'<br />';
 var_dump(decbin((float)$finalttc) != decbin((float)$totalTtc));

我得到了这个结果

diff ttc 3584.03 3584.03
boolean true

diff ttc trim3584.03 3584.03
boolean false

MzU4NC4wMw== MzU4NC4wMw==
boolean false

111000000000 111000000000
boolean false

我真的不明白为什么第一个测试返回true ????

感谢您的帮助

0 个答案:

没有答案