Calculando compartilhamento de receita em diferentes níveis
Pergunta
Eu estou tentando escrever uma função que pode calcular a receita em diferentes níveis hierárquicos ... Por exemplo, você vender US $ 10000 no valor de widgets. Quaisquer ganhos de $ 1 - $ 999 levamos 50%, $ 1000 - $ 4999 levamos 25%, $ 5000 - $ 9999 levamos 10%, $ 10000 - $ 19999 de 5%.
A porcentagem não é tomada com base no valor final. Então, se você ganhou US $ 10000 você não apenas cair na coluna 10%. O seu primeiro US $ 1000 está sujeito a 50%, o próximo $ 5000 25%, o próximo $ 4000 10%.
Agradecemos antecipadamente.
** código de trabalho final. Obrigado pela ajuda!
$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;
Solução
Uma vez que você não tenha especificado um idioma, aqui está um pseudocódigo:
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
Outras dicas
O que você está fazendo é como o código de imposto do IRS funciona, exceto o IRS recebe mais quanto mais você faz. Neste modelo os comissão desliza para baixo quanto mais você vende. Eu estou supondo que você quer a resposta em PHP desde que você colocá-lo na categoria PHP. Se você queria ter horários diferentes para pessoas diferentes de vendas que você poderia fazer a matriz tiers um argumento para a função.
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;
}