房贷计算及比较

本博客主要介绍:

  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()
相关推荐
dme.3 分钟前
Javascript之DOM操作
开发语言·javascript·爬虫·python·ecmascript
加油吧zkf13 分钟前
AI大模型如何重塑软件开发流程?——结合目标检测的深度实践与代码示例
开发语言·图像处理·人工智能·python·yolo
t_hj14 分钟前
python规划
python
czhc114007566329 分钟前
Linux 76 rsync
linux·运维·python
悠悠小茉莉1 小时前
Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)
c++·ide·vscode·python·visualstudio·visual studio
m0_625686551 小时前
day53
python
Real_man2 小时前
告别 requirements.txt,拥抱 pyproject.toml和uv的现代Python工作流
python
站大爷IP2 小时前
Python文件操作的"保险箱":with语句深度实战指南
python
运器1232 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
巴里巴气5 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录