现在有一个需求,需要计算新版个税方案下需要缴纳的个税。
方案一
function fun($salary){
if($salary <= 5000){
$now_tax = 0;
}else if($salary > 5000 && $salary <= 8000){
$now_tax = ($salary - 5000) * 0.03;
}else if($salary > 8000 && $salary <= 17000){
$now_tax = 3000 * 0.03 + ($salary - 8000) * 0.1;
}else if($salary > 17000 && $salary <= 30000){
$now_tax = 3000 * 0.03 + 9000 * 0.1 + ($salary - 17000) * 0.2;
}else if($salary > 30000 && $salary <= 40000){
$now_tax = 3000 * 0.03 + 9000 * 0.1 + 13000 * 0.2 + ($salary - 30000) * 0.25;
}else if($salary > 40000 && $salary <= 60000){
$now_tax = 3000 * 0.03 + 9000 * 0.1 + 13000 * 0.2 + 10000 * 0.25 + ($salary - 40000) * 0.3;
}else if($salary > 60000 && $salary <= 85000){
$now_tax = 3000 * 0.03 + 9000 * 0.1 + 13000 * 0.2 + 10000 * 0.25 + 20000 * 0.3 + ($salary - 60000) * 0.35;
}else($salary > 85000){
$now_tax = 3000 * 0.03 + 9000 * 0.1 + 13000 * 0.2 + 10000 * 0.25 + 20000 * 0.3 + 25000 * 0.35 + ($salary - 85000) * 0.45;
}
return $now_tax;
}
方案二
function fun($salary){
global $config;
$config = array(
['base' => 5000,'rate' => 0.03],
['base' => 8000,'rate' => 0.1],
['base' => 17000,'rate' => 0.2],
['base' => 30000,'rate' => 0.25],
['base' => 40000,'rate' => 0.3],
['base' => 60000,'rate' => 0.35],
['base' => 85000,'rate' => 0.45],
);
$now_tax = 0;
foreach($config as $k => $v){
if($salary <= $config[0]['base']){
return $now_tax;
}else if($k > 0){
if($salary < $v['base']){
$now_tax += ($salary - $config[$k - 1]['base']) * $config[$k - 1]['rate'];
break;
}else{
$now_tax += ($v['base'] - $config[$k - 1]['base']) * $config[$k - 1]['rate'];
}
}
}
return $now_tax;
}
当然,看完方案二,很容易联想到可以用递归的思路来写,不过相对而言,性能会比方案二低一些。
对比两个方案,很容易看出优劣,方案二的可扩展性会更强一些。
作为一个成熟的码农,需要考虑得更多一些,代码的复用性,可扩展性,后期需求的变更等等。