Расчет доли дохода на разных уровнях - PullRequest
0 голосов
/ 30 ноября 2009

Я пытаюсь написать функцию, которая может вычислять доход на разных уровнях ... Например, вы продаете виджеты стоимостью 10000 долларов. Любой доход от 1 до 999 долларов мы берем 50%, от 1000 до 4999 долларов мы берем 25%, от 5000 до 9999 долларов мы берем 10%, от 10000 до 19999 долларов 5%.

Процент не берется на основе окончательного значения. Так что, если вы заработали 10000 долларов, вы не просто попадете в колонку 10%. Ваши первые 1000 долларов подлежат 50%, следующие 5000 долларов 25%, следующие 4000 долларов 10%.

Заранее спасибо.

** Окончательный рабочий код. Спасибо за помощь!

    $input = 10000;

    $tiers = array('1000' => .5, '5000' => .25, '10000' => .1, '20000' => .05, '22000' => .01);

    $accounted_for = 0;
    $total_share = 0;

    $tier = each($tiers);
    while($accounted_for < $input) {

        $cutoff = $tier[0];
        $percent = $tier[1];

        $level = (min($cutoff, $input) - $accounted_for) * $percent;

        $total_share += $level;

        $accounted_for = $cutoff;

        $tier = each($tiers);
    }

    return $total_share;

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Поскольку вы не указали язык, вот несколько псевдокодов:

input = 99999

tiers = [list of (%,cutoff) tuples]

accounted_for = 0
total_share = 0

while accounted_for is less than input:
    percent,cutoff = next element of tiers
    total_share += (min(cutoff,input) - accounted_for) * percent
    accounted_for = cutoff

return total_share
0 голосов
/ 30 ноября 2009

Что вы делаете, так это то, как работает налоговый кодекс IRS, за исключением того, что IRS получает больше, чем больше вы зарабатываете. В этой модели комиссия снижается, чем больше вы продаете. Я предполагаю, что вы хотите получить ответ в PHP, поскольку вы поместили его в категорию PHP. Если вы хотите иметь разные расписания для разных продавцов, вы можете сделать массив уровней аргументом функции.

function calculateEarnings($grossAmountSold) {
    $earnings = 0;
    $accountedFor = 0;
    $tiers = array('1000' => .5, '5000' => .25, '10000' => .1, '20000' => .05, '22000' => .01);

    while($accountedFor < $grossAmountSold) {
        list($cutoff, $commissionRate) = each($tiers);
        if($grossAmountSold < $cutoff) {
            $sold = $grossAmountSold - $accountedFor;
        } else {
            $sold = $cutoff - $accountedFor;
        }
        $earnings += $sold * $commissionRate;
        $accountedFor += $cutoff;
    }
    return $earnings;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...