Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正负浮点数加法PHP:返回指数数_Php_Floating Point_Addition - Fatal编程技术网

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

正负浮点数加法PHP:返回指数数,php,floating-point,addition,Php,Floating Point,Addition,我有很多数组,其中有一些正数和一些负数,我需要对它们的每个数进行加法。如果任何数组具有相同的数字,这些数字应返回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 如果我写

我有很多数组,其中有一些正数和一些负数,我需要对它们的每个数进行加法。如果任何数组具有相同的数字,这些数字应返回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,数字非常小,是数字表示法四舍五入的结果

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

<?php

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

foreach ($arr as $float) {
    printf("%.30f\n", (float)$float);
}
如果你想避免这个问题,你需要对它进行四舍五入,或者确保你的分数总是2so的幂和: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的期望值并非如此。

这是浮点数的本质。您可能会发现number_format函数很有用。number_format也不适用于meechoon number_format$total,2为您的测试用例生成0.00。由于示例数据显示为小数点后两位,所以您要查找的是0.00,对吗?幕后的$total仍然是它的原值。如果你想强制它为零,你可以有一个If条件。我想把这些数字加起来。仅仅使用printf对我来说是行不通的。