优雅的落地个人所得税的计算
个人所得税需求分析
- 应纳税所得额 = 工资收入金额 - 各项社会保险费 - 起征点(5000元)
- 应纳税额 = 应纳税所得额 x 税率 - 速算扣除数
- 个人所得税税率表
- 实发工资=应发工资-五险一金-缴税
- 输入:工资 五险一金
- 输出:扣税多少? 实际到手工资?
代码实现
实现个税表
package config;
public enum Taxratetable {
ONELEVEL(0, 3000, 3, 0),
TWOLEVEL(3000, 12000, 10, 210),
THREELEVEL(12000, 25000, 20, 1410),
FOURLEVEL(25000, 35000, 25, 2660),
FIVELEVEL(35000, 55000, 30, 4410),
SIXLEVEL(55000, 80000, 35, 7160),
SERVENLEVEL(80000, Double.MAX_VALUE, 45, 15160);
private double begin;
private double end;
private double taxrate;
private double QuickalCulationdeDuction;
private Taxratetable(double begin, double end, double taxrate, double QuickalCulationdeDuction) {
this.begin = begin;
this.end = end;
this.taxrate = taxrate;
this.QuickalCulationdeDuction = QuickalCulationdeDuction;
}
public double getBegin() {
return begin;
}
public double getEnd() {
return end;
}
public double getTaxrate() {
return taxrate;
}
public double getQuickalCulationdeDuction() {
return QuickalCulationdeDuction;
}
}
实现算法方法
package config;
public class Calculation {
public static double Threshold = 5000;
public static void main(String[] args) {
Calculation Calculation = new Calculation();
double sum = 15000;
double Insurancepremium = 1000;
System.out.println("总工资"+sum);
System.out.println("五险一金及专项扣除总额"+Insurancepremium);
double taxableincome = Calculation.getTaxableincome(sum, Insurancepremium);
System.out.println("应该缴纳的税部分的钱" + taxableincome);
double taxpayable = Calculation.getTaxpayable(taxableincome);
System.out.println("应该缴纳的税" + taxpayable);
double payroll = Calculation.getPayroll(sum, Insurancepremium, taxpayable);
System.out.println("实发工资" + payroll);
}
public double getTaxableincome(double sum, double Insurancepremium) {
if (sum - Insurancepremium > Threshold) {
return sum - Insurancepremium - Threshold;
} else return 0;
}
public double getTaxpayable(double Taxableincome) {
if (Taxableincome == 0) {
return 0;
}
double v = 0.0;
Taxratetable[] values = Taxratetable.values();
for (Taxratetable tx : values) {
if (Taxableincome >= tx.getBegin() && Taxableincome <= tx.getEnd()) {
v = (Taxableincome * tx.getTaxrate() / 100) - tx.getQuickalCulationdeDuction();
return v;
} else {
continue;
}
}
return v;
}
public double getPayroll(double sum, double Insurancepremium, double Taxableincome) {
return sum - Insurancepremium - Taxableincome;
}
}
优势介绍
- 通过使用Java枚举将不变的税率表抽象定义完成
- 使用循环枚举变量自动计算应缴纳税率增加扩展性,去除传统的if else冗余代码
- 方法清晰 通俗易懂