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 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.2)); } //(2)当20000 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; } /** * 通过税后工资,算出税前工资 * * @param money * @return */ public static String getTaxationBefore(BigDecimal money) { //当X<=800时,个税T=0 BigDecimal taxMoney = new BigDecimal(0.0); if (money.doubleValue() > 800 && money.doubleValue() <= 3360) { taxMoney = money.divide(new BigDecimal(0.2),2,BigDecimal.ROUND_DOWN).add(new BigDecimal(800)); } if (money.doubleValue() > 3360 && money.doubleValue() <= 21000) { taxMoney = money.divide(new BigDecimal(0.84),2,BigDecimal.ROUND_DOWN); } if (money.doubleValue() > 21000 && money.doubleValue() <= 40000) { money = money.subtract(new BigDecimal(2000)); taxMoney = money.divide(new BigDecimal(0.76),2,BigDecimal.ROUND_DOWN); } if (money.doubleValue() > 40000) { money = money.subtract(new BigDecimal(7000)); taxMoney = money.divide(new BigDecimal(0.68),2,BigDecimal.ROUND_DOWN); } DecimalFormat decimalFormat = new DecimalFormat("#.00"); String format = decimalFormat.format(taxMoney); return format; } public static void main(String[] args) { String taxation = getTaxation(new BigDecimal(21000)); String taxationBefore = getTaxationBefore(new BigDecimal(52000)); System.out.println(taxation + " " + taxationBefore); } }