java 计算个人所得税

用double 会存在小数点精度问题,可以用BigDecimal

package com.xfktech.erp.test;

import java.math.BigDecimal;

/**
 * @author liuming
 * @email ming.liu@xfktech.com
 * @date 2018/8/10
 */
public class TestTax {
    public static void main(String[] args) {
        System.out.println(getSalaryTax(BigDecimal.valueOf(3801),BigDecimal.valueOf(300)));
    }

    /**
     * 返回个人所得税
     * @param salaryBeforeTaxTax 工资收入金额
     * @param socialFee  各项社会保险费(三金)
     * @return
     */
    public static BigDecimal getSalaryTax(BigDecimal salaryBeforeTaxTax, BigDecimal socialFee) {

        // 应纳税所得额 = 工资收入金额 - 各项社会保险费 - 起征点(3500元)
        // 应纳税额 = 应纳税所得额 x 税率 - 速算扣除数
        // 说明:如果计算的是外籍人士(包括港、澳、台),则个税起征点应设为4800元。

        BigDecimal taxbase = salaryBeforeTaxTax.subtract(socialFee).subtract(BigDecimal.valueOf(3500));
        int taxrate = 0;//这里税率没有除以百分比;
        int quickdeduction = 0;
        if (taxbase.compareTo(BigDecimal.ZERO) <= 0)//低于个税起征点
        {
            return BigDecimal.ZERO;
        } else if (taxbase.compareTo(BigDecimal.valueOf(1500)) <= 0) {
            taxrate = 3;
            quickdeduction = 0;
        } else if (taxbase.compareTo(BigDecimal.valueOf(4500)) <= 0) {
            taxrate = 10;
            quickdeduction = 105;
        } else if (taxbase.compareTo(BigDecimal.valueOf(9000)) <= 0) {
            taxrate = 20;
            quickdeduction = 555;
        } else if (taxbase.compareTo(BigDecimal.valueOf(35000)) <= 0) {
            taxrate = 25;
            quickdeduction = 1005;
        } else if (taxbase.compareTo(BigDecimal.valueOf(55000)) <= 0) {
            taxrate = 30;
            quickdeduction = 2755;
        } else if (taxbase.compareTo(BigDecimal.valueOf(80000)) <= 0) {
            taxrate = 35;
            quickdeduction = 5505;
        } else {
            taxrate = 45;
            quickdeduction = 13505;
        }
        BigDecimal t = BigDecimal.valueOf(taxrate).divide(BigDecimal.valueOf(100)); //除100
        BigDecimal re = taxbase.multiply(t).subtract(BigDecimal.valueOf(quickdeduction))  ;

        return re.setScale(2,BigDecimal.ROUND_HALF_UP);
    }

}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值