Question

J'essaie d'écrire une fonction permettant de calculer les revenus à différents niveaux ... Par exemple, vous vendez des widgets d'une valeur de 10000 USD. Tous les revenus allant de 1 à 999 dollars, nous prenons 50%, entre 1 000 et 4999 dollars, nous prenons 25%, entre 5 000 et 9999 dollars, nous prenons 10%, entre 10 000 et 19999 5%.

Le pourcentage n'est pas pris en fonction de la valeur finale. Donc, si vous avez gagné 10 000 dollars, vous ne tombez pas dans la colonne des 10%. Votre premier 1000 $ est soumis à 50%, le prochain 5000 $ à 25%, le prochain 4000 $ à 10%.

Merci d'avance.

** Code de travail final. Merci pour l'aide!

    $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;
Était-ce utile?

La solution

Puisque vous n'avez pas spécifié de langue, voici un pseudocode:

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

Autres conseils

Ce que vous faites, c'est comment le code des impôts de l'IRS fonctionne, sauf que l'IRS reçoit de plus en plus. Dans ce modèle, la commission diminue au fur et à mesure que vous vendez. Je suppose que vous voulez la réponse en PHP puisque vous la placez dans la catégorie PHP. Si vous souhaitez utiliser différentes planifications pour différents commerciaux, vous pouvez utiliser le tableau tiers comme argument pour la fonction.

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top