php计算浮点数

api*_*s17 3 php math floating-point

我这里有一个奇怪的数学计算.我希望有人会解释.

$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;
Run Code Online (Sandbox Code Playgroud)

最后一个$i值应为0但返回6.93889390391E-18.

Mar*_*ers 6

你应该阅读这篇文章:

每个计算机科学家应该知道的浮点运算

浮点运算不精确.你应该期待小错误.答案是正确的,在一个小的舍入错误.如果您需要检查浮点数是否为零,最好不要检查它是否完全等于零,而是检查它是否足够接近零.

如果您确实需要精确算术,请不要使用浮点类型.在您的示例中,您可以将所有数字乘以100并使用整数运算来获得精确答案.