为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2022-07-16 18:44:06
我有很多数组,其中有一些正数和一些负数,我需要将它们的每个数字相加。如果任何数组具有相同的数字,应该返回 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 等)。


查看完整回答
反对 回复 2022-07-16
?
慕后森

TA贡献1802条经验 获得超5个赞

帮助我理解这一点

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

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

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


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


查看完整回答
反对 回复 2022-07-16
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号