描述

目前我国个人所得税计算公式如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
应纳个人所得税税额= (工资薪金所得 -五险一金 - 个税免征额)×适用税率-速算扣除数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
个税免征额为5000元/月,2018年10月1日起调整后,也就是2018年实行的7级超额累进个人所得税税率表如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
全月应纳税所得额(含税级距) 税率(%) 速算扣除数
不超过3,000元 3 0
超过3,000元至12,000元的部分 10 210
超过12,000元至25,000元的部分 20 1,410
超过25,000元至35,000元的部分 25 2,660
超过35,000元至55,000元的部分 30 4,410
超过55,000元至80,000元的部分 35 7,160
超过80,000元的部分 45 15,160‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
请编写一个个税计算器,用户输入为应发工资薪金所得扣除五险一金的金额,输出应缴税款和实发工资,结果保留小数点后两位。当输入数字小于0时,输出“error”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入格式

输入一个表示工资的数值,例如12000.0‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式

应缴税款490.00元,实发工资11510.00元。

这里有两个问题需要先弄清楚:

  1. 存在免征额,只有超过免征额的部分才计税。
  2. 分阶计税,工资中处于不同税率区间的分段计税。速算扣除数是按当前应纳税所得和当前税率全额计税时多计算的一部分。例如当应纳税所得为10000元时,适用税率为10%,直接计税为10000 * 10% = 1000元。但实际应纳税为:

3000 3% + (10000-3000) 10% = 10000 10% -3000 7 % = 1000 - 210 = 790元
即每个计税区间的速算扣除数是按当前应纳税所得 * 当前税率多计算的那部分税,可以用于简化计算过程。在每个计税区间只需要确定当前应纳税所得和速算扣除数即可。

计算方法:

  1. 输入一个表示应发工资减五险一金后金额的浮点数
  2. 如果工资小于0:
    1. 输出 ‘error’
  3. 否则:
    1. 计算应纳税所得额salary,即扣除免征额
    2. 如果salary小于等于0:
      1. 税率为0,速算扣除数为0
    3. 如果salary小于等于3000:
      1. 税率为3,速算扣除数为0
    4. 如果salary小于等于12000:
      1. 税率为10,速算扣除数为210
    5. 如果salary小于等于25000:
      1. 税率为20,速算扣除数为1410
    6. 如果salary小于等于35000:
      1. 税率为25,速算扣除数为2660
    7. 如果salary小于等于55000:
      1. 税率为30,速算扣除数为4410
    8. 如果salary小于等于80000:
      1. 税率为35,速算扣除数为7160
    9. 否则(大于80000):
      1. 税率为45,速算扣除数为15160
    10. 计算税额
    11. 输出应交税款和实发工资

参考代码如下;

  1. s = float(input())
  2. if s < 0:
  3. print("error")
  4. else:
  5. salary = s - 5000
  6. if salary <= 0:
  7. fee, num = 0, 0
  8. elif salary <= 3000:
  9. fee, num = 3,0
  10. elif salary <= 12000:
  11. fee, num = 10, 210
  12. elif salary <= 25000:
  13. fee, num = 20, 1410
  14. elif salary <= 35000:
  15. fee, num = 25, 2660
  16. elif salary <= 55000:
  17. fee, num = 30, 4410
  18. elif salary <= 80000:
  19. fee, num = 35, 7160
  20. else:
  21. fee, num = 45, 15160
  22. tax = abs(salary * fee / 100 - num)
  23. print("应缴税款{:.2f}元,实发工资{:.2f}元。".format(tax,salary + 5000 - tax))

函数实现

  1. def cal_tax(salary):
  2. if salary <= 0:
  3. return "error"
  4. else:
  5. salary_for_tax = salary - five_one_insurance_fund - exemption
  6. if salary_for_tax <= 0: # 分情况得到 税率和速算扣除数
  7. fee, deducted_amount = 0, 0
  8. elif salary_for_tax <= 3000:
  9. fee, deducted_amount = 3, 0
  10. elif salary_for_tax <= 12000:
  11. fee, deducted_amount = 10, 210
  12. elif salary_for_tax <= 25000:
  13. fee, deducted_amount = 20, 1410
  14. elif salary_for_tax <= 35000:
  15. fee, deducted_amount = 25, 2660
  16. elif salary_for_tax <= 55000:
  17. fee, deducted_amount = 30, 4410
  18. elif salary_for_tax <= 80000:
  19. fee, deducted_amount = 35, 7160
  20. else:
  21. fee, deducted_amount = 45, 15160
  22. tax = abs(salary_for_tax * fee / 100 - deducted_amount) # 使用税率和速算扣除数计算税款
  23. payment = salary - five_one_insurance_fund - tax
  24. return f"应缴税款{tax:.2f}元,实发工资{payment:.2f}元。"
  25. if __name__ == '__main__':
  26. salary = float(input()) # salary 应发工资薪金所得
  27. five_one_insurance_fund = float(input()) # five_one_insurance_fund 五险一金
  28. exemption = float(input()) # exemption 个税免征额
  29. print(cal_tax(salary))