我这里有一个奇怪的数学计算。我希望有人会解释。
$a = 1.85/100;
$b = 1.5/100;
$c = 1.1/100;
$d = 0.4/100;
$e = 0.4/100;
$f = 0.4/100;
$g = 0.4/100;
$h = $a + $b + $c + $d + $e + $f + $g;
echo $h*100 ."<br>";
$i = $h-$a;
$i = $i-$b;
$i = $i-$c;
$i = $i-$d;
$i = $i-$e;
$i = $i-$f;
$i = $i-$g;
echo $i;
最后$i
值应该为0,但它返回6.93889390391E-18。
答案 0 :(得分:6)
你应该阅读这篇文章:
What Every Computer Scientist Should Know About Floating-Point Arithmetic
浮点运算并不准确。你应该期待小错误。答案是正确的,在一个小的舍入错误。如果你需要检查浮点数是否为零,最好不要检查它是否完全等于零,而是检查它是否足够接近零。
如果您确实需要精确算术,请不要使用浮点类型。在您的示例中,您可以将所有数字乘以100,并使用整数运算来获得精确答案。
答案 1 :(得分:2)
是否有任何想法纠正我的等式以显示最终结果0.00?
是的,round($i, 2)
“差异”通常很小,将其四舍五入到几乎总能解决问题。
答案 2 :(得分:2)
那里没有任何错误,只有近似的舍入。
在这个cas中你应该将你的所有值乘以1000并在计算结束时进行除法,或者更好地求助于precise calculation extension