如果你也如我一样是贷款买房,那你可能遇到过两种还款方式,等额本息(Average Capitital Plus Interest)或等额本金(Average Capital)。等额本金的方式还款,开始每月还款多,之后少。等额本息的方式还款,每个月还款一样多,但最后还的总的利息相对是多的。每个人会根据自己的情况来决定哪种还款方式。我当时选择的是等额本金的方式,因为我觉得等额本金的方式容易理解和计算。现在看这两个中文名字取得不好,如果参考英文叫平均本金或平均本息可能更好些。
下面说说这两种方式每月还款额的公式的推导。假设总贷款额度是t,计划的贷款期限是m个月,月利率是r,我们要求这两种方式下每月还款的数额p。
等额本金
等额本金的还款方式每月还的本金是一样多的,再加上当月的利息,就是当月应还款的数量。计算公式是 p(n)=tm+[t−(n−1)tm]r 。这里n代表第n个月。这个公式可以翻译成下面的计算机程序(Python)。
def p_average_capital(t, m, r, n):
capital_per_month = t / m
interest = (t - (n - 1) * capital_per_month) * r
return capital_per_month + interest
我们来试验一下这个程序。假设我贷款29万,贷款20年,年利率是4%,那我第一年每月的还款额度为:
[round (p_average_capital(290000, 20 * 12, 0.04/12, n),2) for n in range(1,13)]
结果为:
[2175.0,
2170.97,
2166.94,
2162.92,
2158.89,
2154.86,
2150.83,
2146.81,
2142.78,
2138.75,
2134.72,
2130.69]
到最后一年,我每月的还款额度为:
[round (p_average_capital(290000, 20 * 12, 0.04/12, n),2) for n in range(19*12+1,20*12+1)]
结果为:
[1256.67,
1252.64,
1248.61,
1244.58,
1240.56,
1236.53,
1232.5,
1228.47,
1224.44,
1220.42,
1216.39,
1212.36]
可以看到还款额度在递减。如果哪一天银行的利率变了,我仍然使用这个公式,只要改变下利率参数,就可以算出某月的应还款额。
等额本息
采用等额本息还款方式,利率不变的情况下,每月还款额度是一样的。下面我们就来推导这个额度。
在第一个月,我欠银行的钱是 t(1+r)−p 。
在第二个月,我欠银行的钱是 (t(1+r)−p)(1+r)−p ,也即 t(1+r)2−p[1+(1+r)] 。
在第三个月,我欠银行的钱是 ((t(1+r)−p)(1+r)−p)(1+r)−p ,也即 t(1+r)3−p[1+(1+r)+(1+r)2] 。
…
在第m个月,我欠银行的钱是 t(1+r)m−p[1+(1+r)+...+(1+r)m−1] 。
上式的第2项 p[1+(1+r)+...+(1+r)m−1] 是等比数列,可以应用等比数列求和公式 S=a1(1−qn)1−q 来计算化简,这样在第m个月,我欠银行的钱是 t(1+r)m−p((1+r)m−1r) 。
因为要求在第m个月还清贷款,所以 t(1+r)m−p((1+r)m−1r)=0 。
可以求得每月还款额度公式为 p=t(1+r)mr(1+r)m−1 。
这个公式可以翻译成下面的计算机程序(Python)。
def p_average_capital_interest(t, m, r):
compound = (1+r) ** m
return t * compound * r / (compound - 1)
我们来试验一下这个程序。还假设我贷款29万,贷款20年,年利率是4%,那我每月的还款额度为:
round (p_average_capital_interest(290000, 20*12, 0.04/12), 2)
结果为:
1757.34
到目前为止一切正常,除了推导公式复杂一些。如果银行的利率在还款期间变了呢?我需要先计算当前我欠银行多少钱,然后用新的利率和剩余还款期来计算每月的还款额度。总体而言等额本息的计算方式比等额本金复杂一些。但知道了原理也都一切在掌握之中。
等等
本文的目的介绍等额本金和等额本息已经达到了。下面说点题外话。通常银行贷款的利率都是年利率,而前面我们计算时需要用月利率,就简单地把年利率除以12。当然银行也是这样做的,但这样做合理吗?
我假设我借银行贷款10000块钱,年利率是100%。如果按年利率算一年后,我需要还银行的钱为 10000(1+100%)=20000 。如果按月利率算,因为利息也要产生利息即利滚利或复利,那么一年后,我需要还银行的钱为 10000(1+112)12 。
round (10000 * (1+1/12) ** 12 )
结果为:
26130
结果一年后我需要还银行的钱为26130元,比按年利率时多出了整整6000多元。我们假设银行再邪恶一些,按日算利息呢?
round (10000 * (1+1/365) ** 365 )
结果为:
27146
结果一年后我需要还银行的钱为27146元,还钱又增多了。我们假设银行尝到了甜头再再邪恶一些,按秒计息呢?
seconds_per_year = 365 * 24 * 60 * 60
round(10000 * (1+1/seconds_per_year) ** seconds_per_year )
结果为:
27183
看出点端倪吗?这个数字不会无限增大,27183除以10000为2.7183,接近自然常数e。实际自然常数e也正来源于此。
我不是搞金融的,请学金融的告诉一下把年利率直接除以12当作月利率合不合理,为了抵消复利影响,是否应该把月利率适当调小一点呢?