本博客主要介绍:
1. 等额本金计算公式
2. 等额本息计算公式
3. 对比两种还款方式
4. 本示例:贷款金额为35万, 期限12年,年利率4.9%
等额本金计算
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
matplotlib.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
A = 350000
RATE = 0.049
N = 144
benjin = A/N
month_detail = []
n = 0
while n < N:
tmp = []
n += 1
tmp.append(n)
tmp.append(A)
lixi = A*RATE/12
A = A - benjin
tmp.append(benjin)
tmp.append(lixi)
tmp.append(benjin+lixi)
month_detail.append(tmp)
等额本息计算
A = 350000
RATE = 0.049/12
N = 144
yuegong = (A*RATE*(1+RATE)**N)/((1+RATE)**N-1)
print('yuegong', yuegong)
month_detail_2 = []
n = 0
while n < N:
n += 1
tmp = []
tmp.append(n)
tmp.append(A)
lixi = A*RATE
benjin = yuegong - lixi
A = A - benjin
tmp.append(benjin)
tmp.append(lixi)
tmp.append(yuegong)
month_detail_2.append(tmp)
月利息比较
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, list(i[3] for i in month_detail), label='等额本金', color='red', linestyle='-') # 绘制y1折线
plt.plot(x, list(i[3] for i in month_detail_2), label='等额本息', color='blue', linestyle='--') # 绘制y2折线
# 显示图形
plt.legend()
plt.title('月利息')
plt.xlabel('期数')
plt.ylabel('利息')
plt.show()
月本金比较
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, list(i[2] for i in month_detail), label='等额本金', color='red', linestyle='-') # 绘制y1折线
plt.plot(x, list(i[2] for i in month_detail_2), label='等额本息', color='blue', linestyle='--') # 绘制y2折线
# 显示图形
plt.legend()
plt.title('月本金')
plt.xlabel('期数')
plt.ylabel('本金')
plt.show()
累计利息
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, [sum(each[3] for each in month_detail[:i+1]) for i in range(144)], label='等额本金', color='red', linestyle='-') # 绘制y1折线
plt.plot(x, [sum(each[3] for each in month_detail_2[:i+1]) for i in range(144)], label='等额本息', color='blue', linestyle='--') # 绘制y2折线
# 显示图形
plt.legend()
plt.title('累计利息')
plt.xlabel('期数')
plt.ylabel('累计利息')
plt.show()
累计利息差额
随着还款进行,两种还款方式,总支付利息上的差异
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, [sum(each2[3]-each1[3] for each1,each2 in zip(month_detail[:i+1],month_detail_2[:i+1])) for i in range(144)], color='red', linestyle='-') # 绘制y1折线
# 显示图形
plt.legend()
plt.title('利息差额')
plt.xlabel('期数')
plt.ylabel('利息')
plt.show()
可以看到两者的利息差额,从一开始就是等额本息还的利息更多,中期差距拉开的更快
剩余贷款金额
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, list(i[1] for i in month_detail), label='等额本金', color='red', linestyle='-') # 绘制y1折线
plt.plot(x, list(i[1] for i in month_detail_2), label='等额本息', color='blue', linestyle='--') # 绘制y2折线
# 显示图形
plt.legend()
plt.title('月剩余贷款')
plt.xlabel('期数')
plt.ylabel('金额')
plt.show()
月供
# 使用plot函数绘制两组折线
x = list(range(145))[1:]
plt.plot(x, list(i[4] for i in month_detail), label='等额本金', color='red', linestyle='-') # 绘制y1折线
plt.plot(x, list(i[4] for i in month_detail_2), label='等额本息', color='blue', linestyle='--') # 绘制y2折线
# 显示图形
plt.legend()
plt.title('月供')
plt.xlabel('期数')
plt.ylabel('金额')
plt.show()