正负浮点数加法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来得到正确的输出吗?


隔江千里
浏览 147回答 2
2回答

素胚勾勒不出你

指数是 -15,这个数字非常小,是数字的IEEE 浮点表示中四舍五入的结果。要了解问题所在,您可以查看此代码示例:<?php$arr=[&nbsp; '-20.91',&nbsp; '-34.48',&nbsp; '-5.18',&nbsp; '34.48',&nbsp; '20.91',&nbsp; '5.18'];foreach ($arr as $float) {&nbsp; &nbsp; printf("%.30f\n", (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 的期望不是。
打开App,查看更多内容
随时随地看视频慕课网APP