1.背景
在贷款买房的宝子们一定有了解等额本金和等额本息,年轻的时候只听销售在那里计算,
您可能听得云里雾里。
等额本金:每个月还的本金固定,利息逐渐减少。总还款额每个月递减。计算公式的话,每月应还本金应该是贷款总额除以月数,比如总贷款是A,分n个月还,那每月本金就是A/n。利息的话就是剩余本金乘以月利率,比如第一个月利息是Ar,第二个月是(A - A/n)r,依此类推。所以每个月的还款额是本金部分加上剩余本金的利息。总利息的话,可能需要把每个月的利息加起来,所以总利息是Ar(n + 1)/2。
等额本息:每个月还款额相同。总利息就是每月还款额乘以n,减去本金A。
2.计算
等额本息还款法的计算公式是:
[贷款本金 × 月利率 ×(1+月利率)^还款月数] ÷ [(1+月利率)^还款月数 -1 ](其中^为次方的意思)
等额本金还款法的计算公式是:
[贷款本金 / 还款期数 + (贷款本金 - 累积已归还本金额)*月利率
如下图:
# -*- coding: utf-8 -*-
# csdn:jn10010537
def calc_equal_principal(principal, annual_rate, years):
"""
等额本金还款计算
:param principal: 贷款本金
:param annual_rate: 年利率(例如0.05表示5%)
:param years: 贷款年数
:return: 每月还款计划,总利息
"""
monthly_rate = annual_rate / 12 # 月利率
months = years * 12 # 总月数
monthly_principal = principal / months # 每月应还本金
total_interest = 0 # 总利息
schedule = [] # 还款计划
remaining = principal # 剩余本金
for month in range(1, months + 1):
interest = remaining * monthly_rate # 当月利息
total_payment = monthly_principal + interest # 当月总还款额
total_interest += interest
schedule.append({
'第几月': month,
'当月应还本金': round(monthly_principal, 2),
'当月利息': round(interest, 2),
'当月总还款额': round(total_payment, 2),
'当月还款后剩余本金': round(remaining - monthly_principal, 2)
})
remaining -= monthly_principal # 更新剩余本金
return schedule, round(total_interest, 2)
def calc_equal_installment(principal, annual_rate, years):
"""
等额本息还款计算
:param principal: 贷款本金
:param annual_rate: 年利率(例如0.05表示5%)
:param years: 贷款年数
:return: 每月还款计划,总利息
"""
monthly_rate = annual_rate / 12 # 月利率
months = years * 12 # 总月数
# 计算每月还款额
monthly_payment = (principal * monthly_rate * (1 + monthly_rate)**months /
((1 + monthly_rate)**months - 1))
monthly_payment = round(monthly_payment, 2) # 四舍五入到分
total_interest = 0
schedule = []
remaining = principal
for month in range(1, months + 1):
interest = remaining * monthly_rate # 当月利息
principal_payment = monthly_payment - interest # 当月本金
# 处理最后一期剩余本金
if month == months:
principal_payment = round(remaining, 2) # 确保剩余本金清零
monthly_payment = round(principal_payment + interest, 2)
total_interest += interest
new_remaining = remaining - principal_payment
schedule.append({
'第几月': month,
'当月应还本金': round(principal_payment, 2),
'当月利息': round(interest, 2),
'当月总还款额': monthly_payment,
'当月还款后剩余本金': round(new_remaining, 2)
})
remaining = new_remaining
return schedule, round(total_interest, 2)
# 示例使用
if __name__ == "__main__":
principal = 1000000 # 贷款本金100万元
annual_rate = 0.05 # 年利率5%
years = 20 # 贷款期限20年
# 计算等额本金
schedule_principal, total_interest_principal = calc_equal_principal(principal, annual_rate, years)
print("等额本金首月还款:", schedule_principal[0])
print("等额本金总利息:", total_interest_principal)
# 计算等额本息
schedule_installment, total_interest_installment = calc_equal_installment(principal, annual_rate, years)
print("\n等额本息首月还款:", schedule_installment[0])
print("等额本息总利息:", total_interest_installment)
运行如下:
3.总结
等额本金:前期压力大,总利息较少;
等额本息:每月还款额固定,总利息较多;
注意:一个月有28天,30天,31天,那么其实利息是精确到天的!即月利息/当月天数,然后核算到交租金当日的本金加利息!
比如等额本金,每月15号付银行租子,当天15号利息算到下一个月!
2023年12月15日-2023年12月31日,合计17天,计算为16天.
2024年01月01日-2024年01月14日,合计14天.
2024年01月01日年化从4.3%调整为4.2%。
计算2024年1月15号付银行本息:
假如等额本金是15000
剩余本金是1000000
还款本息:15000 + 1000000* (4.3 / 12 * 0.01 * 16 / 31) + 1000000 * (4.2 / 12 * 0.01 * 14 / 31)
博主选择的是等额本金,假如没有法律的话,利息是不想还一点!没法,咬牙坚持长达20年的还款~
献给需要贷款的C友,买房需谨慎!
4.推导
上面等额本息比较麻烦一点!
等额本息贷款采用的是复合利率计算。在每期还款的结算时刻,剩余本金所产生的利息要和剩余的本金(贷款余额)一起被计息,也就是说未付的利息也要计息。
等额本息比较上面是结论,可以看下面的推导公式:
设贷款总额为A,银行月利率为β,总期数为m(个月),月还款额设为X,则各个月所欠银行贷款为:
第1个月:A(1+β)-X
第2个月:(A(1+β)-X)(1+β)-X = A(1+β)^2-X[1+(1+β)]
第3个月[(A(1+β)-X)(1+β)-X](1+β)-X =A(1+β)^3-X[1+(1+β)+(1+β)^2] …
由此可得第n个月后所欠银行贷款为 A(1+β)^n –X[1+(1+β)+(1+β)^2+…+(1+β)^(n-1)]= A(1+β)^n –X[(1+β)^n - 1]/β
由于还款总期数为m,也即第m月刚好还完银行所有贷款,
因此有 A(1+β)^m –X[(1+β)^m - 1]/β=0
由此求得 X = Aβ(1+β)^m /[(1+β)^m - 1]
等比数列求和公式: