Интересно, есть ли элегантный способ сделать это с помощью одной функции вместо написания чего-то особенного.
Например, я хочу разделить 100 $ на 3 части (которые НЕ должны быть равными).
Если я просто сделаю 100/3, то каждая часть будет 33,33 $.
1 => 33.33
2 => 33.33
3 => 33.33
Если я объединю эти части вместе, он вернет 99,9 вместо 100.
Как я могу разделить значение на 3 части, одна из которых будет другой, поэтому когда вместе они будут равны 100 $, а не 99,9 $
1 => 33.34
2 => 33.33
3 => 33.33
Я написал эту функцию, но надеюсь, что есть один лайнер, который я могу использовать вместо него
function adjust_parts($total, $parts) {
// If total does not equal the sum of all the parts
if(array_sum($parts) != $total) {
// Keep adding a penny until it's "properly" spread
$adjusted = false;
while ($adjusted == false) {
$parts[0] += 0.01;
if(bccomp(array_sum($parts), $total, 2) == 0) {
$adjusted = true;
}
}
}
return $parts;
}
Спасибо