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



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

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

这段代码应该给我输出为 0,但如果我写,它会返回 -3.5527136788005E-15

echo round($total);

它显示-0
如果可能的话,有人可以帮助我获得正确的输出并将其四舍五入为 2 吗?

提前感谢!

指数是 -15,这个数字非常小,是在数字的 IEEE 浮点表示中舍入的结果。

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

<?php
$arr=[
'-20.91',
'-34.48',
'-5.18',
'34.48',
'20.91',
'5.18'
];
foreach ($arr as $float) {
printf("%.30fn", (float)$float);
}

演示

如果你想避免这个问题,你需要四舍五入它,或者确保你工作的数字总是 2 的幂之和(所以对于分数:0.5、0.25、0.125、0.0625 等(。

帮助我理解这一点

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

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

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


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

最新更新