我在带有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 ????
感谢您的帮助