2009-11-30 2 views
0

J'essaie d'écrire une fonction qui peut calculer le revenu à différents niveaux hiérarchisés ... Par exemple, vous vendez des gadgets de 10 000 $. Tous les gains de 1 $ - 999 $, nous prenons 50%, 1000 $ - 4999 $, nous prenons 25%, 5000 $ - 9999 $, nous prenons 10%, 10000 $ - 19999 5%.Calcul de la part des revenus à différents niveaux

Le pourcentage n'est pas pris en fonction de la valeur finale. Donc, si vous avez gagné 10 000 $, vous ne tombez pas dans la colonne des 10%. Votre premier 1000 $ est sujet à 50%, les prochains 5000 $ 25%, les prochains 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; 
+0

quelle langue? S'il vous plaît poster le code, vous avez écrit jusqu'à présent. – shahkalpesh

+0

Voir ci-dessus, en utilisant le code de l'affiche ci-dessous – CrashRoX

+0

Cela devrait être "$ accounting_for + = $ cutoff" – divegeek

Répondre

1

Puisque vous n'avez pas spécifié une langue, voici quelques pseudo-code:

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

Vraiment apprécier votre aide. J'ai mis en place votre suggestion. Mais je pense que je suis encore tranquille ... – CrashRoX

+0

Voir le commentaire ci-dessus. – Amber

0

Ce que vous faites est de savoir comment le code fiscal IRS fonctionne, sauf l'IRS devient plus plus que vous faites. Dans ce modèle, la commission glisse vers le bas, plus vous vendez. Je suppose que vous voulez la réponse en PHP puisque vous l'avez mis dans la catégorie PHP. Si vous vouliez avoir des horaires différents pour différents commerciaux, vous pourriez faire du tableau des tiers un 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; 
} 
+0

J'apprécie votre contribution. Ce n'est pas exactement ce que je cherchais. Le vôtre prend une coupe à chaque niveau. La solution de Dav compte pour les niveaux précédents. Merci encore. – CrashRoX

Questions connexes