【问题标题】:array_sum numbers with different comma not equal to zero but long numberarray_sum 不同逗号的数字不等于零但长数字
【发布时间】:2018-09-30 10:51:56
【问题描述】:
if(array_sum($request->amount) <> 0)
{
    session()->flash('sum_error','sum_error');
    return back();
}
else
    return array_sum($request->amount);

像这样的数字一切正常

1
2
2
3
5
7
12
36

但是当 $request->amount 中的数字是这样的时候

278.75
35.96
-203
-13.92
-97.79

我的数字很长

-2.8421709430404E-14

我怎么能让 array_sum 给我这个值的零结果 谢谢

【问题讨论】:

  • 这是浮点精度限制。执行abs(array_sum($request-&gt;amount)) &lt; 1e-3 之类的操作,将容差设置为 0.001

标签: php array-sum


【解决方案1】:

使用 sprintf 将指数格式转换为您想要的格式。

$sum = array_sum($request->amount);

$sum = sprintf('%f', $sum);

// or (if you want to limit the number of fractional digits to lets say 6
$sum = sprintf('%.6f', $sum);

// or use number_format function
$sum = number_format($sum,5);

if($sum <> 0)
{
    session()->flash('sum_error','sum_error');
    return back();
}
else
    return $sum;

【讨论】:

    【解决方案2】:

    您可以将数组总和转换为整数,这将使您的指数值输出为零

    尝试以下解决方案:

    if((int) array_sum($request->amount) <> 0)
    {
        session()->flash('sum_error','sum_error');
        return back();
    }
    else
        return (int) array_sum($request->amount);
    

    我有简单的转换为整数值

    【讨论】:

    • 如果总和是 0.45;这是一个真正的总和值,它会导致逻辑失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    相关资源
    最近更新 更多