正负浮点数加法PHP:返回指数数

Positive and Negative floating numbers addition PHP: returning exponential number

我有很多数组,里面有一些正数和一些负数,我需要对它们中的每一个数进行加法运算。如果任何数组具有相同的数字,应该 return 0,但它是 returning 指数数据。

$arr=[
  '-20.91',
  '-34.48',
  '-5.18',
  '34.48',
  '20.91',
  '5.18'
];
$total = 0;
foreach($arr as $ar){
  $total+=$ar;
}
echo $total;

这段代码应该给我输出 0 但它是 returning -3.5527136788005E-15 如果我写

echo round($total);

显示-0.
如果可能的话,有人可以帮我四舍五入到 2 以获得正确的输出吗?

提前致谢!

指数是-15,这个数字非常小,是IEEE floating point数字表示中四舍五入的结果。

要了解问题所在,您可以查看此代码示例:

<?php

$arr=[
  '-20.91',
  '-34.48',
  '-5.18',
  '34.48',
  '20.91',
  '5.18'
];

foreach ($arr as $float) {
    printf("%.30f\n", (float)$float);
}

Demo

如果您想避免这个问题,您将需要对其进行四舍五入或确保您使用的数字始终是 2 的幂之和(因此对于分数:0.5、0.25、0.125、0.0625 等) .

help me to understand this

使用二进制编码的浮点数无法准确表示数字

'-20.91', '-34.48', '-5.18', '34.48', '20.91', '5.18'

而是使用附近的值。这些总和约为 -3.5527136788005E-15 而不是 0。


总和是正确的。计算总和必须为 0 的期望不是。