числа array_sum с различной запятой, не равной нулю, но длинное число - PullRequest
0 голосов
/ 30 сентября 2018
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 дать мне нулевой результат для этих значений, спасибо

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Используйте 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;
0 голосов
/ 30 сентября 2018

Вы можете преобразовать сумму массива в целое число, которое даст нулевой вывод для экспоненциального значения

Попробуйте решение ниже:

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

У меня есть простое приведение к целочисленному значению

...