📄 taxcomputer.java
字号:
package iitax;
import java.util.ArrayList;
public class TaxComputer {
/**
* 根据税率表, 起征点, 个人收入计算应该缴纳的个人所得税
* @param taxRateList 税率表
* @param startingPoint 个税起征点
* @param income 个人收入
* @return 应该缴纳的个税值
*/
public static double compute(ArrayList taxRateList, double startingPoint, double income){
if(income > Constants.MAX_INCOME) return -1;
double tax = 0.0D; //tax用于存储中间及最终的税值.
double temp = income - startingPoint; //temp 用于存储要交税的那部分收入
if(temp <= 0) return 0.0D; //要交税的收入小于0, 交税额为0
/*
* 算法如下:
* 1. if语句用于判断输入收入值减去起征点后值之后处于哪个税率项(确定范围).
* 2. 确定范围之后对于,小于这个税项的其它项都要收全值(该项的跨度*该项的税率值).
* 3. 最后加上,处于被确定范围部分的税率值.
*/
for(int i=0; i<taxRateList.size(); i++){
if(((TaxItem)taxRateList.get(i)).getTaxStartPoint()<temp
&& ((TaxItem)taxRateList.get(i)).getTaxEndPoint()>temp){
for(int j=0; j<i; j++){
TaxItem ti = (TaxItem)taxRateList.get(j);
tax += (ti.getTaxEndPoint() - ti.getTaxStartPoint()) * ti.getTaxRate();
}
TaxItem iTi = (TaxItem)taxRateList.get(i);
tax += (temp - iTi.getTaxStartPoint()) * iTi.getTaxRate();
return tax;
}
}
return -1;
}
/**
* 测试函数
* @param args
*/
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new TaxItem(0, 500, 0.05));
list.add(new TaxItem(500, 2000, 0.10));
list.add(new TaxItem(2000, 5000, 0.15));
list.add(new TaxItem(5000, 20000, 0.20));
list.add(new TaxItem(20000, 0.25));
System.out.println(compute(list, 1000, 2700));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -