一、新稅率的計算方式

# 2018年12月21日,發布《個人所得稅扣繳申報管理辦法(試行)》中規定,扣繳義務人向居民個人支付工資、薪金所得時,應當按照累計預扣法計算預扣稅款,並按月辦理扣繳申報。
# 累計預扣法,是指扣繳義務人在一個納稅年度內預扣預繳稅款時,以納稅人在本單位截至當前月份工資、薪金所得累計收入減除累計免稅收入、累計減除費用、累計專項扣除、累計專項附加扣除和累計依法確定的其他扣除后的余額為累計預扣預繳應納稅所得額。
# 本期稅費 = (累計稅前收入 - 累計五險一金 - 累計起征點 - 累計專項減免 - 累計其它減免) * 稅率表 - 累計已交稅費
# 假設一個人稅前工資20000,五險一金3500,專項減免1000
# 一月份繳稅,(20000 - 3500 - 5000 - 1000) * 0.03 = 315
# 二月份繳稅,(20000*2 - 3500*2 - 5000*2 -1000*2) * 0.03 - 315 = 315
# 因此在工資不變的條件下,我們可以得到一條計算當前月份個人所得稅的公式,公式如下:
# 公式: 每月個稅 = (稅前工資 - 五險一金 - 起征點 - 專項減免) * 月份 * 稅率 - 之前月份的個稅,
# 但是,此公式只適用於工資不變的情況下,因為如果工資是變化的,累計稅前收入 != 稅前工資*月份。
# 因此,如果在工資不變的情況下,知道五險一金、專項減免的金額,就可以計算出一年中每個月的稅后工資、個稅。
二、Python版本代碼
def calculator(money, ins, special=0):
"""
根據稅前工資計算每個月的稅后工資、個人所得稅
:param money: 稅前工資
:param ins: 五險一金
:param special: 專項減免
:return:
"""
m, r = [0, 36000, 144000, 300000, 420000, 660000.960000], [0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45]
s = '計算結果如下:\n'
total_tax = 0
for i in range(1, 13):
month_tax = 0
extra = (money - ins - special - 5000) * i
if extra > 0:
for j in range(1, len(m)):
if extra > m[j]:
if j == len(m) - 1:
month_tax += (extra - m[j]) * r[j]
else:
month_tax += (m[j] - m[j - 1]) * r[j - 1]
else:
month_tax += (extra - m[j - 1]) * r[j - 1]
break
month_tax -= total_tax
s += '{}月份工資,稅后:{},所得稅:{}\n'.format(i, money - ins - month_tax, month_tax)
total_tax += month_tax
else:
s += '{}月份工資,稅后:{},所得稅:{}\n'.format(i, money - ins, 0)
return s
if __name__ == '__main__':
while True:
money = int(input('稅前工資:'))
ins = int(input('五險一金:'))
special = int(input('專項減免:'))
print(calculator(money, ins, special))

三、配合前端顯示

