liusheng
2023-09-27 da3edb56ef670c58f6de09d28fde986d6be5a845
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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);
    }
 
}