新个税计算类 博客分类: 经验
程序员文章站
2024-03-23 08:48:52
...
/* * Copyright (C), 2002-2018, song * FileName: PersonalIncomeTaxUtil.java * Author: feng * Date: 2018年6月19日 下午2:01:18 * Description: //模块目的、功能描述 * History: //修改记录 * <author> <time> <version> <desc> * 修改人姓名 修改时间 版本号 描述 */ package com.feng.test; import java.math.BigDecimal; /** * 〈个税计算工具类〉<br> * 〈个税计算工具类〉 * * @author feng * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */ public final class PersonalIncomeTaxUtil { /** * 旧个税起征点 */ private static int OLD_TAX_THRESHOLD = 3500; /** * 新个税起征点 */ private static int NEW_TAX_THRESHOLD = 5000; /** * 私有构造方法 */ private PersonalIncomeTaxUtil() { } /** * 旧个税计算方案: <br> * 〈旧个税计算方案〉 * * @param amt * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static Double oldTaxCalculate(Double amt) { System.out.print(amt + "=="); BigDecimal taxAmt = new BigDecimal(amt).subtract(BigDecimal.valueOf(OLD_TAX_THRESHOLD)); if(taxAmt.compareTo(new BigDecimal("0")) <= 0) { return new BigDecimal("0.00").doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("1500")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.03)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("4500")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.1)).subtract(BigDecimal.valueOf(105)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("9000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.2)).subtract(BigDecimal.valueOf(555)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("35000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.25)).subtract(BigDecimal.valueOf(1005)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("55000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.30)).subtract(BigDecimal.valueOf(2755)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("80000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.35)).subtract(BigDecimal.valueOf(5505)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else{ return taxAmt.multiply(BigDecimal.valueOf(0.45)).subtract(BigDecimal.valueOf(13505)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } } /** * 新个税计算方案: <br> * 〈新个税计算方案〉 * * @param amt * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static Double newTaxCalculate(Double amt) { BigDecimal taxAmt = new BigDecimal(amt).subtract(BigDecimal.valueOf(NEW_TAX_THRESHOLD)); if(taxAmt.compareTo(new BigDecimal("0")) <= 0) { return new BigDecimal("0.00").doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("3000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.03)) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("12000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.1)) .subtract(BigDecimal.valueOf(3000*(0.1-0.03))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("25000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.2)) .subtract(BigDecimal.valueOf(3000*(0.2-0.03) + (12000-3000)*(0.2-0.1))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("35000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.25)) .subtract(BigDecimal.valueOf(3000*(0.25-0.03) + (12000-3000)*(0.25-0.1) + (25000-12000)*(0.25-0.2))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("55000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.30)) .subtract(BigDecimal.valueOf(3000*(0.30-0.03) + (12000-3000)*(0.30-0.1) + (25000-12000)*(0.30-0.2) + (35000-25000)*(0.30-0.25))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else if(taxAmt.compareTo(new BigDecimal("80000")) <= 0){ return taxAmt.multiply(BigDecimal.valueOf(0.35)) .subtract(BigDecimal.valueOf(3000*(0.35-0.03) + (12000-3000)*(0.35-0.1) + (25000-12000)*(0.35-0.2) + (35000-25000)*(0.35-0.25) + (55000-35000)*(0.35-0.3))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); }else{ return taxAmt.multiply(BigDecimal.valueOf(0.45)) .subtract(BigDecimal.valueOf(3000*(0.45-0.03) + (12000-3000)*(0.45-0.1) + (25000-12000)*(0.45-0.2) + (35000-25000)*(0.45-0.25) + (55000-35000)*(0.45-0.3) + (80000-35000)*(0.45-0.35))) .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } } public static void main(String[] args) { System.out.println(oldTaxCalculate(5000d) + "-->" +newTaxCalculate(5000d)); System.out.println(oldTaxCalculate(8000d) + "-->" +newTaxCalculate(8000d)); System.out.println(oldTaxCalculate(10000d) + "-->" +newTaxCalculate(10000d)); System.out.println(oldTaxCalculate(13200d) + "-->" +newTaxCalculate(13200d)); System.out.println(oldTaxCalculate(14000d) + "-->" +newTaxCalculate(14000d)); System.out.println(oldTaxCalculate(23200d) + "-->" +newTaxCalculate(23200d)); System.out.println(oldTaxCalculate(50000d) + "-->" +newTaxCalculate(50000d)); System.out.println(oldTaxCalculate(100000d) + "-->" +newTaxCalculate(100000d)); } }
上一篇: Socket长连接和心跳 博客分类: SocketJ2SE
下一篇: Requests库基本使用
推荐阅读