正负浮点数加法PHP:返回指数数
我有很多数组,其中有一些正数和一些负数,我需要对它们的每个数进行加法。如果任何数组具有相同的数字,这些数字应返回0,但它返回的是指数数据正负浮点数加法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 如果我写
$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对我来说是行不通的。