Я хотел бы разделить общую сумму (например, 4.45) на динамическое количество переменных (например, 4. Сумма переменных всегда должна быть суммой общей суммы.
если вы разделите на 4, вы получите 1,1125 с раундом (1,1125, 2). Вы получите 1,11. И 4 * 1,11 = 4,44. Остальные 0,01 могут быть добавлены к последнему числу варов, так что это будет 1.12.
Я написал вам функцию, которая делает почти то, что вы хотите (я возвращаю массив). Вы можете указать сумму и количество переменных, которые хотите вернуть. Всегда округляется до 2 десятичных
<?php
function divideAmount($amount, $numberOfVars){
$values = [];
$dividedAmount = $amount/$numberOfVars;
for($i=1; $i<=$numberOfVars; $i++){
$values[] = round($dividedAmount,2);
}
$newAmount = 0;
foreach($values as $value){
$newAmount += $value;
}
if($newAmount != $amount){
$amountLeft = $amount - $newAmount;
$values[$numberOfVars-1] += $amountLeft;
}
return $values;
}$values = divideAmount(4.45, 4);
var_dump($values);
Ты можешь использовать array_fill()
за это:
$tot = 4.45; # sum total
$n = 4; # addends number
$values = array_fill( 0, $n-1, round( $tot/$n,2 ) );
$values[ $n-1 ] = round( $tot - array_sum( $values ),2 );
print_r( $values );
echo array_sum($values) . PHP_EOL;
будет выводить:
Array
(
[0] => 1.11
[1] => 1.11
[2] => 1.11
[3] => 1.12
)
4.45
Сначала вы заполняете массив н-1 элементы с округленным делением общего числа на динамическое число, затем вы добавляете последние элементы, вычитая сумму существующих элементов к общей.
1) Используйте массив, а не отдельные переменные
2) Подсчитать и сложить массив