Calcul du partage des revenus à différents niveaux
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;
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;
}