$totalFileFloat = (float) (str_replace(',', '', $totalFile));
$total = (float) ($total);
var_dump([$totalFileFloat, $total]);
var_dump($totalFileFloat != $total);
var_dump($totalFileFloat !== $total);
var_dump($totalFileFloat === $total);
var_dump($totalFileFloat == $total);
代码的结果是:
array(2) { [0]=> float(183024.22) [1]=> float(183024.22) }
bool(true)
bool(true)
bool(false)
bool(false)
有人可以解释一下吗?
答案 0 :(得分:0)
文档说不要比较浮点数,但如果需要比较,可以使用bccomp(http://php.net/manual/en/function.bccomp.php)
这里的例子是:
<?php
$a = 0.17;
$b = 1 - 0.83; //0.17
echo "$a == $b (core comp oper): ", var_dump($a==$b);
echo "$a == $b (with bc func) : ", var_dump( bccomp($a, $b)==0 );
Result:
0.17 == 0.17 (core comp oper): bool(false)
0.17 == 0.17 (with bc func) : bool(true)
答案 1 :(得分:0)
这可能是因为$ total和$ totalFileFloat不完全相同。 var_dump显示它是相同的,但事实上并非如此。另请参阅http://php.net/manual/en/language.types.float.php#113703
答案 2 :(得分:0)
嗨floating point
数字有限precision
。
看看我的例子
<?php
$x = 8 - 6.4; // which is equal to 1.6
$y = 1.6;
var_dump($x == $y); // output bool(false)
var_dump(round($x) == round($y)) // output bool(true)
?>
根据[{1}} Php
,我们不应直接比较manual
nubers。欲了解更多信息,请访问
http://php.net/manual/en/language.types.float.php