Разделите количество с плавающей точкой на число переменных x

Я хотел бы разделить общую сумму (например, 4.45) на динамическое число переменных (например, 4. Сумма переменных всегда должна быть суммой общей суммы.

  • var1 = 1,11
  • var2 = 1,11
  • var3 = 1,11
  • var4 = 1.12

если вы разделите на 4, вы получите 1,1125 с раундом (1,1125, 2). Вы получите 1,11. И 4 * 1,11 = 4,44. Остальные 0,01 могут быть добавлены к последнему числу варов, так что это будет 1.12.

3 ответа

Решение

Я написал вам функцию, которая делает почти то, что вы хотите (я возвращаю массив). Вы можете указать сумму и количество переменных, которые хотите вернуть. Всегда округляется до 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

phpFiddle demo

Сначала вы заполняете массив из n-1 элементов округленным делением суммы на динамическое число, затем вы добавляете последние элементы, вычитая сумму существующих элементов к общей сумме.

1) Используйте массив, а не отдельные переменные 2) Подсчитайте и сложите массив

Другие вопросы по тегам