package com.ruoyi.common.tax;
|
|
import java.math.BigDecimal;
|
import java.text.DecimalFormat;
|
|
/**
|
* 绩效个税计算规则
|
*
|
* @author ls
|
*/
|
public class PerformanceTaxtUtils {
|
/**
|
* 分隔符
|
*/
|
public static final String SEPARATOR = ",";
|
|
/**
|
* 获取个税
|
*
|
* @param wages 工资 (扣掉5000元免税 和 扣掉社保的金额)
|
*/
|
public static BigDecimal getPersonTaxation(BigDecimal wages) {
|
BigDecimal firstTax = new BigDecimal(0.0);
|
BigDecimal secondTax = new BigDecimal(0.0);
|
BigDecimal thirdTax = new BigDecimal(0.0);
|
BigDecimal fourthTax = new BigDecimal(0.0);
|
BigDecimal fifthTax = new BigDecimal(0.0);
|
BigDecimal sixthTax = new BigDecimal(0.0);
|
BigDecimal seventhTax = new BigDecimal(0.0);
|
|
|
//当X<=36000时的税
|
if (wages.doubleValue() <= 36000) {
|
firstTax = wages.multiply(BigDecimal.valueOf(0.03));
|
} else if (wages.doubleValue() > 36000) {
|
firstTax = BigDecimal.valueOf(36000).multiply(BigDecimal.valueOf(0.03));
|
}
|
|
// 计算36000到144000之间的税
|
if (wages.doubleValue() > 36000 && wages.doubleValue() <= 144000) {
|
//如果工资小于144000,就直接进行计算,先减去36000的部分,再算税
|
BigDecimal subtract = wages.subtract(BigDecimal.valueOf(36000));
|
secondTax = subtract.multiply(BigDecimal.valueOf(0.1));
|
} else if (wages.doubleValue() > 144000) {
|
//如果工资大于144000,就直接用144000进行计算,先减去36000的部分,再算税
|
BigDecimal subtract1 = BigDecimal.valueOf(144000).subtract(BigDecimal.valueOf(36000));
|
secondTax = subtract1.multiply(BigDecimal.valueOf(0.1));
|
}
|
|
// 计算300000到144000之间的税
|
if (wages.doubleValue() > 144000 && wages.doubleValue() <= 300000) {
|
//如果工资小于300000,就直接进行计算,先减去144000的部分,再算税
|
BigDecimal subtract = wages.subtract(new BigDecimal(144000));
|
thirdTax = subtract.multiply(BigDecimal.valueOf(0.2));
|
} else if (wages.doubleValue() > 300000) {
|
//如果工资大于300000,就直接用300000进行计算,先减去144000的部分,再算税
|
BigDecimal subtract1 = BigDecimal.valueOf(300000).subtract(BigDecimal.valueOf(144000));
|
thirdTax = subtract1.multiply(BigDecimal.valueOf(0.2));
|
}
|
|
// 计算300000到420000之间的税
|
if (wages.doubleValue() > 300000 && wages.doubleValue() <= 420000) {
|
//如果工资小于420000,就直接进行计算,先减去300000的部分,再算税
|
BigDecimal subtract = wages.subtract(BigDecimal.valueOf(300000));
|
fourthTax = subtract.multiply(BigDecimal.valueOf(0.25));
|
} else if (wages.doubleValue() > 420000) {
|
//如果工资大于420000,就直接用420000进行计算,先减去300000的部分,再算税
|
BigDecimal subtract1 = BigDecimal.valueOf(420000).subtract(BigDecimal.valueOf(300000));
|
fourthTax = subtract1.multiply(BigDecimal.valueOf(0.25));
|
}
|
|
//计算660000到420000之间的税
|
if (wages.doubleValue() > 420000 && wages.doubleValue() <= 660000) {
|
//如果工资小于660000,就直接进行计算,先减去420000的部分,再算税
|
BigDecimal subtract = wages.subtract(BigDecimal.valueOf(420000));
|
fifthTax = subtract.multiply(BigDecimal.valueOf(0.3));
|
} else if (wages.doubleValue() > 660000) {
|
//如果工资大于660000,就直接用660000进行计算,先减去420000的部分,再算税
|
BigDecimal subtract1 = BigDecimal.valueOf(660000).subtract(BigDecimal.valueOf(420000));
|
fifthTax = subtract1.multiply(BigDecimal.valueOf(0.3));
|
}
|
|
// 计算660000到960000之间的税
|
if (wages.doubleValue() > 660000 && wages.doubleValue() <= 960000) {
|
//如果工资小于960000,就直接进行计算,先减去660000的部分,再算税
|
BigDecimal subtract = wages.subtract(BigDecimal.valueOf(660000));
|
sixthTax = subtract.multiply(BigDecimal.valueOf(0.35));
|
} else if (wages.doubleValue() > 960000) {
|
//如果工资大于960000,就直接用960000进行计算,先减去660000的部分,再算税
|
BigDecimal subtract1 = BigDecimal.valueOf(960000).subtract(BigDecimal.valueOf(660000));
|
sixthTax = subtract1.multiply(BigDecimal.valueOf(0.35));
|
}
|
|
//960000以上的税
|
if (wages.doubleValue() > 960000) {
|
//如果工资大于960000,就直接进行计算,先减去660000的部分,再算税
|
BigDecimal subtract = wages.subtract(BigDecimal.valueOf(960000));
|
seventhTax = subtract.multiply(BigDecimal.valueOf(0.45));
|
}
|
|
//将计算的税相加
|
BigDecimal result = firstTax.add(secondTax).add(thirdTax).add(fourthTax).add(fifthTax).add(sixthTax).add(seventhTax);
|
|
return result;
|
}
|
|
|
public static void main(String[] args) {
|
BigDecimal personTaxation = getPersonTaxation(new BigDecimal(7654321));
|
// String taxationBefore = getTaxationBefore(new BigDecimal(52000));
|
|
|
System.out.println(personTaxation);
|
}
|
|
}
|