我有很多数组,其中有一些正数和一些负数,我需要将它们的每个数字相加。如果任何数组具有相同的数字,应该返回 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-15echo round($total);它显示-0。如果可能的话,有人可以帮我把它四舍五入到2来得到正确的输出吗?
2 回答

素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
指数是 -15,这个数字非常小,是数字的IEEE 浮点表示中四舍五入的结果。
要了解问题所在,您可以查看此代码示例:
<?php
$arr=[
'-20.91',
'-34.48',
'-5.18',
'34.48',
'20.91',
'5.18'
];
foreach ($arr as $float) {
printf("%.30f\n", (float)$float);
}
如果您想避免这个问题,您将需要对其进行四舍五入或确保您使用的数字始终是 2 的幂的总和(因此对于分数:0.5、0.25、0.125、0.0625 等)。

慕后森
TA贡献1802条经验 获得超5个赞
帮助我理解这一点
使用二进制编码的浮点数不能准确表示数字
'-20.91', '-34.48', '-5.18', '34.48', '20.91', '5.18'
而是使用附近的值。这些总和约为 -3.5527136788005E-15 而不是 0。
总和是正确的。计算的总和必须为 0 的期望不是。
- 2 回答
- 0 关注
- 146 浏览
添加回答
举报
0/150
提交
取消