当前位置: 代码迷 >> 综合 >> 新版个税计算方式解读+计算代码
  详细解决方案

新版个税计算方式解读+计算代码

热度:84   发布时间:2024-02-19 21:47:14.0

自从个税抵扣补贴政策出台后,新版本的个税计算方式也发生了很大的变化,从以往的按月扣除变成了年度综合扣除。

个税计算公式:

当月个税=【本年度累计收入工资合计-累计扣除(起征点x月份)-累计附加专项扣除-累计其他扣除】x个税税率-速算扣除-本年累计已缴个税

看不懂?请看如下举例:

小明是一家企业员工,已知小明每月累计扣除总额度为12200,

具体是:子女教育1000+住房贷款1000+瞻仰老人1000+五险一金3000+商业保险200+个税起征5000=12200元

小明2019年发放1月份工资为15000元:则当月个税=(15000-12200)*3%-0-0=84元

小明2019年发放2月份工资为45000元:则当月个税=(15000+45000-12200*2)*3%-0-84=984元

小明2019年发放3月份工资为15000元:则当月个税=(15000+45000+15000-12200*3)*10%-2520-84-984=252元

。。。

可以看出来,计算当月个税是需要知道以往从1月份到上个月的所有纳税信息才能计算出来的,这点比旧的计算方式要复杂一些,但是这种看似环环相扣的算法,用程序来计算,恰到好处。

代码不多,看客莫笑,见谅哈:

public class xx {/* 必须知道每月税前工资多少,免税额度,五险一金,因为每年7月份是公积金基数调整日,7-12月份的五险一金数额会变化 */public static void main(String[] args) {/* 本年度,每月税前工资 */float[] wages = new float[]{15000,45000,15000,15200,15200,15200,15200,15200,15200,15200,15200,30200};/* 每月免税额度 */int  DutyFreeNum  = 9200;/* 1-6月份的五险一金数额 */float FiveSafeAndGJJ1_6 = 3000f;/* 1-6月份的公积金到账数额 */float GJJ1_6 = 2500f;/* 7-12月份的五险一金数额 */float FiveSafeAndGJJ7_12 = 3300f;/* 7-12月份的公积金到账数额 */float GJJ7_12 = 2800f;/* 本年所有应纳税的薪水数额 */float AllTaxableMoney = 0;/* 本年所有已经缴纳的税钱 */float AllAlreadyTax = 0;/* 本年总税前薪水 */float AllPreTaxWages = 0;/* 本年税后薪水 */float AllGetHandWages = 0;/* 本年公积金总数 */float AllGetHandGJJ = 0;DecimalFormat decimalFormat=new DecimalFormat("00.00");    for (int i = 0; i < 12; i++) {float tax = getTax(AllTaxableMoney+wages[i]-DutyFreeNum-(i < 6 ? FiveSafeAndGJJ1_6 : FiveSafeAndGJJ7_12), AllAlreadyTax);AllAlreadyTax += tax;AllTaxableMoney += wages[i]-DutyFreeNum-(i < 6 ? FiveSafeAndGJJ1_6 : FiveSafeAndGJJ7_12);AllPreTaxWages += wages[i];float getHandWages = wages[i]-(i < 6 ? FiveSafeAndGJJ1_6 : FiveSafeAndGJJ7_12)-tax;AllGetHandWages += getHandWages;AllGetHandGJJ += (i < 6 ? GJJ1_6 : GJJ7_12);System.out.print((i+1)+"月份纳税:"+decimalFormat.format(tax)+"\t"+" 总纳税:"+decimalFormat.format(AllAlreadyTax)+"\t"+" 实发:"+decimalFormat.format(getHandWages)+"\t"+" 全部税前工资:"+decimalFormat.format(AllPreTaxWages)+"\t"+" 全部到手工资:"+decimalFormat.format(AllGetHandWages)+"\t"+" 全部到手公积金:"+decimalFormat.format(AllGetHandGJJ)+"\t"+" 全部到手工资+公积金:"+decimalFormat.format(AllGetHandWages+AllGetHandGJJ)+"\n");}}/* 应税额不可为负数 */private static float getTax(float allTaxableMoney, float AllAlreadyTax) {float sui = getTax(allTaxableMoney)-AllAlreadyTax;return sui > 0 ? sui : 0;}/* 输入应税额,得到税金 */private static float getTax(float TaxableMoney) {if (TaxableMoney <= 36000) {return TaxableMoney * 0.03f;} else if (TaxableMoney <= 144000) {return TaxableMoney * 0.1f - 2520;} else if (TaxableMoney <= 300000) {return TaxableMoney * 0.2f - 16920;} else if (TaxableMoney <= 420000) {return TaxableMoney * 0.25f - 31920;} else if (TaxableMoney <= 660000) {return TaxableMoney * 0.3f - 52920;} else if (TaxableMoney <= 960000) {return TaxableMoney * 0.35f - 85920;} else {return TaxableMoney * 0.45f - 181920;}}
}

 

  相关解决方案