liusheng
2023-06-05 85f9ba60b55be46520f6646ff0d092409a411f61
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
package com.ruoyi.common.tax;
 
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
 
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.List;
 
/**
 * 劳务报酬个税计算规则 (可能不答公共用法,用前先看看是否适合)
 *
 * @author ls
 */
public class TaxtUtils {
    /**
     * 分隔符
     */
    public static final String SEPARATOR = ",";
 
    /**
     * 获取税金
     *
     * @param money 报酬 (税前)
     */
    public static String getTaxation(BigDecimal money) {
        //当X<=800时,个税T=0
        BigDecimal taxMoney = new BigDecimal(0.0);
 
        //当800<X<=4000时,个税T=(X-800)*20%
        if (money.doubleValue() > 800 && money.doubleValue() <= 4000) {
            BigDecimal subtract = money.subtract(new BigDecimal(800));
            taxMoney = subtract.multiply(new BigDecimal(0.2));
        }
 
        BigDecimal multiply = money.multiply(new BigDecimal(0.8));
        // 当X>4000时
        //(1)当X*(1-20%)<=20000时,个税T=X*(1-20%)*20%
        if (money.doubleValue() > 4000 && multiply.doubleValue() <= 20000) {
            taxMoney = multiply.multiply(new BigDecimal(0.8));
        }
 
        //(2)当20000<X*(1-20%)<=50000时,个税T=X*(1-20%)*30%-2000
        if (multiply.doubleValue() > 20000 && multiply.doubleValue() <= 50000) {
            taxMoney = multiply.multiply(new BigDecimal(0.3)).subtract(new BigDecimal(2000));
        }
 
        //X*(1-20%)>50000时,个税T=X*(1-20%)*40%-7000
        if (multiply.doubleValue() > 50000) {
            taxMoney = multiply.multiply(new BigDecimal(0.4)).subtract(new BigDecimal(7000));
        }
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        String format = decimalFormat.format(taxMoney);
        return format;
    }
 
    public static void main(String[] args) {
        String taxation = getTaxation(new BigDecimal(70000));
        System.out.println(taxation);
    }
 
}