优雅的落地个人所得税的计算

优雅的落地个人所得税的计算

个人所得税需求分析

  • 个所得税算法获取
  1. 应纳税所得额 = 工资收入金额 - 各项社会保险费 - 起征点(5000元)
  2. 应纳税额 = 应纳税所得额 x 税率 - 速算扣除数
  3. 个人所得税税率表
  4. 实发工资=应发工资-五险一金-缴税
  • 输入:工资 五险一金
  • 输出:扣税多少? 实际到手工资?

代码实现

实现个税表

package config;

public enum Taxratetable {

    ONELEVEL(0, 3000, 3, 0),
    TWOLEVEL(3000, 12000, 10, 210),
    THREELEVEL(12000, 25000, 20, 1410),
    FOURLEVEL(25000, 35000, 25, 2660),
    FIVELEVEL(35000, 55000, 30, 4410),
    SIXLEVEL(55000, 80000, 35, 7160),
    SERVENLEVEL(80000, Double.MAX_VALUE, 45, 15160);

    private double begin;
    private double end;
    private double taxrate;
    private double QuickalCulationdeDuction;

    private Taxratetable(double begin, double end, double taxrate, double QuickalCulationdeDuction) {
        this.begin = begin;
        this.end = end;
        this.taxrate = taxrate;
        this.QuickalCulationdeDuction = QuickalCulationdeDuction;
    }

    public double getBegin() {
        return begin;
    }

    public double getEnd() {
        return end;
    }

    public double getTaxrate() {
        return taxrate;
    }

    public double getQuickalCulationdeDuction() {
        return QuickalCulationdeDuction;
    }
}

实现算法方法

package config;

public class Calculation {

    public static double Threshold = 5000;

    public static void main(String[] args) {

        Calculation Calculation = new Calculation();
        double sum = 15000;
        double Insurancepremium = 1000;
        System.out.println("总工资"+sum);
        System.out.println("五险一金及专项扣除总额"+Insurancepremium);
        double taxableincome = Calculation.getTaxableincome(sum, Insurancepremium);
        System.out.println("应该缴纳的税部分的钱" + taxableincome);
        double taxpayable = Calculation.getTaxpayable(taxableincome);
        System.out.println("应该缴纳的税" + taxpayable);
        double payroll = Calculation.getPayroll(sum, Insurancepremium, taxpayable);
        System.out.println("实发工资" + payroll);
    }

    /**
     * @param sum              总共发了多少工资
     * @param Insurancepremium 总共交了多少社保费用
     * @return 需要交税的部分钱 例如你拿8000 缴纳社保1000 此时应该返回2000
     */
    public double getTaxableincome(double sum, double Insurancepremium) {
        if (sum - Insurancepremium > Threshold) {
            return sum - Insurancepremium - Threshold;
        } else return 0;

    }
    /**
     * 应纳税额
     * 根据需要交税的钱返回需要缴纳的税钱
     */
    public double getTaxpayable(double Taxableincome) {
        if (Taxableincome == 0) {
            return 0;
        }
        double v = 0.0;
        Taxratetable[] values = Taxratetable.values();
        for (Taxratetable tx : values) {
            if (Taxableincome >= tx.getBegin() && Taxableincome <= tx.getEnd()) {
                v = (Taxableincome * tx.getTaxrate() / 100) - tx.getQuickalCulationdeDuction();
                return v;

            } else {
                continue;
            }
        }
        return v;
    }

    /**
     * @param sum              总工资
     * @param Insurancepremium 社保
     * @param Taxableincome    扣税多少
     * @return Payroll 实发工资
     */

    public double getPayroll(double sum, double Insurancepremium, double Taxableincome) {
        return sum - Insurancepremium - Taxableincome;
    }
}

优势介绍

  • 通过使用Java枚举将不变的税率表抽象定义完成
  • 使用循环枚举变量自动计算应缴纳税率增加扩展性,去除传统的if else冗余代码
  • 方法清晰 通俗易懂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值