描述
目前我国个人所得税计算公式如下:
应纳个人所得税税额= (工资薪金所得 -五险一金 - 个税免征额)×适用税率-速算扣除数
个税免征额为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元。
这里有两个问题需要先弄清楚:
- 存在免征额,只有超过免征额的部分才计税。
 - 分阶计税,工资中处于不同税率区间的分段计税。速算扣除数是按当前应纳税所得和当前税率全额计税时多计算的一部分。例如当应纳税所得为10000元时,适用税率为10%,直接计税为10000 * 10% = 1000元。但实际应纳税为:
 
3000  3% + (10000-3000) 10% = 10000  10% -3000  7 % = 1000 - 210 = 790元
即每个计税区间的速算扣除数是按当前应纳税所得 * 当前税率多计算的那部分税,可以用于简化计算过程。在每个计税区间只需要确定当前应纳税所得和速算扣除数即可。
计算方法:
- 输入一个表示应发工资减五险一金后金额的浮点数
 - 如果工资小于0:
- 输出 ‘error’
 
 - 否则:
- 计算应纳税所得额salary,即扣除免征额
 - 如果salary小于等于0:
- 税率为0,速算扣除数为0
 
 - 如果salary小于等于3000:
- 税率为3,速算扣除数为0
 
 - 如果salary小于等于12000:
- 税率为10,速算扣除数为210
 
 - 如果salary小于等于25000:
- 税率为20,速算扣除数为1410
 
 - 如果salary小于等于35000:
- 税率为25,速算扣除数为2660
 
 - 如果salary小于等于55000:
- 税率为30,速算扣除数为4410
 
 - 如果salary小于等于80000:
- 税率为35,速算扣除数为7160
 
 - 否则(大于80000):
- 税率为45,速算扣除数为15160
 
 - 计算税额
 - 输出应交税款和实发工资
 
 
参考代码如下;
s = float(input())if s < 0:print("error")else:salary = s - 5000if salary <= 0:fee, num = 0, 0elif salary <= 3000:fee, num = 3,0elif salary <= 12000:fee, num = 10, 210elif salary <= 25000:fee, num = 20, 1410elif salary <= 35000:fee, num = 25, 2660elif salary <= 55000:fee, num = 30, 4410elif salary <= 80000:fee, num = 35, 7160else:fee, num = 45, 15160tax = abs(salary * fee / 100 - num)print("应缴税款{:.2f}元,实发工资{:.2f}元。".format(tax,salary + 5000 - tax))
函数实现
def cal_tax(salary):if salary <= 0:return "error"else:salary_for_tax = salary - five_one_insurance_fund - exemptionif salary_for_tax <= 0: # 分情况得到 税率和速算扣除数fee, deducted_amount = 0, 0elif salary_for_tax <= 3000:fee, deducted_amount = 3, 0elif salary_for_tax <= 12000:fee, deducted_amount = 10, 210elif salary_for_tax <= 25000:fee, deducted_amount = 20, 1410elif salary_for_tax <= 35000:fee, deducted_amount = 25, 2660elif salary_for_tax <= 55000:fee, deducted_amount = 30, 4410elif salary_for_tax <= 80000:fee, deducted_amount = 35, 7160else:fee, deducted_amount = 45, 15160tax = abs(salary_for_tax * fee / 100 - deducted_amount) # 使用税率和速算扣除数计算税款payment = salary - five_one_insurance_fund - taxreturn f"应缴税款{tax:.2f}元,实发工资{payment:.2f}元。"if __name__ == '__main__':salary = float(input()) # salary 应发工资薪金所得five_one_insurance_fund = float(input()) # five_one_insurance_fund 五险一金exemption = float(input()) # exemption 个税免征额print(cal_tax(salary))
