我正在尝试创建分层税务计算器。
用户输入金额,例如500,000
从那个数额开始,我就按照以下方式征税:
0 - 125,000 = 0%
125,001 - 250,000 = 2%
250,001 - 925,000 = 5%
925,001 - 1,500,000 = 10%
1,500,001 - or more = 12%
因此,对下一个125,000
的第一个2%
,然后124,999
不征税,等等。
我可以用太多的代码行来进行冗长的计算。我确信有一个相对简单的方法可以做到这一点,所以我向这里的人们提供更多的知识,以找到更简洁的方法。
答案 0 :(得分:1)
function calculator($value) {
if(!is_int($value) && !is_double($value))
return;
if($value > 1500000)
$value = $value - ($value*0.12);
elseif($value > 925000)
$value = $value - ($value*0.10);
elseif($value > 250000)
$value = $value - ($value*0.05);
elseif($value > 125000)
$value = $value - ($value*0.02);
return $value;
}
您只需输入一个值(int或double),它将返回计算出的值。请注意,您不能使用,
(逗号)。
编辑:稍微改为逻辑。
答案 1 :(得分:1)
这不会进行任何数字验证或货币格式化,但它确实很好地压缩了代码段。我也不确定你想要哪个数字,所以我要返回三个值:税率,税额和价格减税。
我没有使用if / else语句块,而是选择使用数组函数。 (Demo)
方法#1:2行和返回
function tax($value) {
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
$rate=key(array_filter($tiers,function($threshold)use($value){return $value>$threshold;}));
return [$rate,$value*$rate,$value-$value*$rate];
}
方法#2:4行和返回,但效率更高
function tax($value) {
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
foreach($tiers as $rate=>$threshold){
if($value>$threshold){break;} // $rate will be preserved outside of the loop
}
return [$rate,$value*$rate,$value-$value*$rate];
}
调用这样的函数:var_export(tax(126999));
将输出:
array (
0 => '.12',
1 => 1523988.0,
2 => 11175912.0,
)
因为你正在放置"代码简洁"在#34代码效率之前,我会推荐方法#1。因为这项任务太小/太轻,我认为任何人都不会注意到通过微优化获得任何收益。
P.S。如果您不是在同一个脚本中多次执行此操作和/或不想进行函数调用,则只需使用以下内容声明$rate
:
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
$rate=key(array_filter($tiers,function($threshold)use($value){return $value>$threshold;}));
或
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
foreach($tiers as $rate=>$threshold){
if($value>$threshold){break;}
}