算法:不同税率计算的个税问题
1.一直银行利率,低于1000元,不用交税,超过的部分按照如下规则缴费.例如1750元工资需要缴纳个人所得税是:
taxes = 1000 * 0% + 500* 1% + 250 * 2%;
或者
若为2750元工资时候,
taxes = 1000 * 0% + 500* 1% +500 * 2% + 500* 3%+250* 3%;
输入:工资额
输出:需要缴纳的个人所得税
/**
* 计算税费:银行利率,低于1000元不用交税,超过的部分按照如下规则缴费.例如1750元工资需要缴纳个人所得税是:
taxes = 1000 * 0% + 500* 1% + 250 * 2%;
* @param salary
* @return
*/
public static float caculateSalaryTax(int salary) {
if (salary <= 1000) return 0;
int num = (salary - 1000)/500;
int remain = (salary - 1000) % 500;
int result = 0;
for (int i = 1;i<= num ;i++) {
result += 5000 * i *0.01;
}
result += remain * (num +1) *0.01;
return result;
}
2.问题延伸:如果原来的缴费不是等额度缴费,变成了【500,1000,1500,2500,4000,…】则写出相应的函数
输入:工资额
输出:需要缴纳的个人所得税
//时间太晚了,明天解决
/**
* 改进税率计算方式:如果原来的缴费不是等额度缴费,变成了500,1000,1500,2500,4000,...则写出相应的函数,低于500不交税
* @param salary
* @return
*/
public static float caculateSalaryTax2(int salary) {
if (salary <= 500) return 0;
if (salary > 500 && salary <= 1000) return (salary -500) * 0.01f;
float finalResult = 0;
int count =1;
while (funN(count) * 500 < salary) {
count++;
}
int ratioIndex = count -1;
for (int i = 1;i <= ratioIndex;i++) {
finalResult = finalResult + (0.01f * i) * i * 500;
}
finalResult = finalResult + (ratioIndex +1)*0.01f * (salary - funN(ratioIndex) * 500);
return finalResult;
}
/**
* 递归:找出规律
* @param n 表示
* @return
*/
public static int funN(int n) {
if (n == 1) return 2;
return funN( n- 1) + (n-1);
}
时间太晚了,这个里面还有一些小的bug没有处理,后期需要修复。