房贷计算及比较

本博客主要介绍:

  1. 等额本金计算公式

  2. 等额本息计算公式

  3. 对比两种还款方式

  4. 本示例:贷款金额为35万, 期限12年,年利率4.9%

等额本金计算

python 复制代码
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)

    
    

等额本息计算

python 复制代码
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)
    
    

月利息比较

python 复制代码
# 使用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()

月本金比较

python 复制代码
# 使用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()

累计利息

python 复制代码
# 使用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()

累计利息差额

随着还款进行,两种还款方式,总支付利息上的差异

python 复制代码
# 使用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()

可以看到两者的利息差额,从一开始就是等额本息还的利息更多,中期差距拉开的更快

剩余贷款金额

python 复制代码
# 使用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()

月供

python 复制代码
# 使用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()
相关推荐
桃子叔叔几秒前
python学习从0到专家(8)容器之列表、元组、字典、集合、字符串小结
开发语言·python·学习
想做富婆21 分钟前
python入门:不同进制数据的表示方式,转换;数据类型的转换,隐式类型的转换
开发语言·python
网络风云3 小时前
Flask(补充内容)配置SSL 证书 实现 HTTPS 服务
python·https·flask·ssl
暴力袋鼠哥7 小时前
基于YOLO11的车牌识别分析系统
python
满怀10159 小时前
【Python进阶】列表:全面解析与实战指南
python·算法
小小菜鸟,可笑可笑10 小时前
Python 注释进阶之Google风格
开发语言·python
upp10 小时前
[bug]langchain agent报错Invalid Format: Missing ‘Action Input:‘ after ‘Action:‘
javascript·python·langchain·bug
小技与小术10 小时前
代码随想录算法训练营day4(链表)
数据结构·python·算法·链表
前端开发张小七10 小时前
每日一练:4.有效的括号
前端·python
gongzairen11 小时前
Ngrok 内网穿透实现Django+Vue部署
后端·python·django