背景
经常收到各个银行电话推销可以办理小额贷款/信用卡账单分期/万用金, 或者其他乱七八糟的名字的产品. 遂问电销人员, 你们这个最后年化利息多少? 这个时候, 一般销售人员都直接回避这个问题, 美其名曰: “我们不收利息, 我们只收取一定的手续费, 基于您这边的良好信用, 现在您有一笔5万的额度是可以立即提现的, 可以分1年还, 每月只需要XXXX元”
可能不太懂的同学, 听到电销的宣传, 感觉这利率还不算贵, 缺钱急用还挺划算的啊. 有可能直接被套路, 就接受了忽悠, 办理了这个贷款/分期产品.
下面我以浦发银行实际例子来算一下, 类似产品最后年化利率到底是多少.
如上图所示, 是浦发银行的贷款产品(万用金), 可以看到, 提现10000元, 分12期即分12个月还钱, 等额本息的还款方式, 每月需还款929.51元. 初略地看, 你可以会简单的认为这个利率就是, 一共还的钱为929.51*12
, 然后借款本金为10000元, 那么年化利率即为: (929.51*12 - 10000)/10000*100%=11.54%
感觉似乎不那么高.
然而, 事实上, 这种算法是有问题的, 因为你借款的本金10000元, 并没有享受到1年的期限, 以后每个月都还了本金呀.
实际年化利率
我们用网上常见的房贷/借款计算器来算一下, 如果按照年化11.54%
来计算, 每月的还款情况应该如下, 即每个月只需要等额本息还款886.34, 比929.51元少不少.
而如果每个月还款929.51元的话, 其利率远远不止11.54%, 直接仍然用那个借款计算器大概估计一下. 貌似现有的网上的工具都只能正向算, 即已知利率和贷款本金计算还款计划表, 没有一个工具能从每月还款额反推贷款利率, 初步多次尝试得到如下逼近的结果.
可以看到, 年化利率达到了20.66%, 比之前预想想象中多了太多了. 所以电话销售在推销的时候, 往往不会直接告诉你这个年化利率, 因为太高了, 说了你可能不太会接受. 而这个利率到底是怎么计算来的呢? 为啥会有前后这么大的差别? 实际上, 你借款本金1W并没有享受整年, 而是只享受到了1个月, 因为1个月之后, 你就有归还部分本金(和利息).
推导方法
我们来正向推到一下这个等额本息利率的计算过程.
假设借款总额为A, 月利率为R, 每月还款额为M, 抓住一点, 欠款总额为本金*(1 月利率)
则有:
(本来是markdown渲染的公式, 无奈结合table转成html之后太丑了, 于是就用截图的方式了, 点开后查看大图)
所以, 能得到第i个月的欠款情况, 上面的公式可以简化一下, 因为被减数M后边的是一个等比数列, 得到第i个月后, 欠款总额为
如果知道月利率R, 要计算每个月还款额也可以直接通过上面这个公式得到,
以上述浦发银行的这个例子为准, 其中A=10000, M=929.51
, 代入上面的公式就可以算出R
的值.
不太好直接解方程, 自己写了段小代码迭代搜索一下能算出来.
貌似这里能出一道给程序猿的面试题目了, 哈哈. 码农朋友们, 看看有哪些方法能够算出来? (敲黑板) 我这边暂时不公布自己写的这段代码, 看看大家有思路? 后面有空可以写个小程序, 供大家使用.
通过计算得到, 借款10000元, 每月还款额度为929.51元的情况下, 月利率为0.017
即1.7%
, 年化利率即为 20.65%
基本上与文首查到的一致. 月利率出来之后, 还款计划表也就自然而然能够出来了.
>>> monthRate = calcMonthRate(12, 10000, 929.51)
>>> print monthRate0.0172138214111
>>> print monthRate * 120.206565856934
>>> schedules = repaymentSchedules(12, 10000, monthRate)
>>> for s in schedules: print s
...
[1, '929.49', '172.14', '757.35', '9242.65']
[2, '929.49', '159.10', '770.39', '8472.26']
[3, '929.49', '145.84', '783.65', '7688.61']
[4, '929.49', '132.35', '797.14', '6891.47']
[5, '929.49', '118.63', '810.86', '6080.61']
[6, '929.49', '104.67', '824.82', '5255.79']
[7, '929.49', '90.47', '839.02', '4416.77']
[8, '929.49', '76.03', '853.46', '3563.31']
[9, '929.49', '61.34', '868.15', '2695.16']
[10, '929.49', '46.39', '883.10', '1812.06']
[11, '929.49', '31.19', '898.30', '913.76']
[12, '929.49', '15.73', '913.76', '-0.00']
期数 | 还款本息 | 利息 | 本金 | 剩余本金 |
---|---|---|---|---|
1 | 929.51 | 172.17 | 757.34 | 9242.66 |
2 | 929.51 | 159.13 | 770.38 | 8472.28 |
3 | 929.51 | 145.87 | 783.64 | 7688.64 |
4 | 929.51 | 132.38 | 797.13 | 6891.51 |
5 | 929.51 | 118.65 | 810.86 | 6080.65 |
6 | 929.51 | 104.69 | 824.82 | 5255.84 |
7 | 929.51 | 90.49 | 839.02 | 4416.82 |
8 | 929.51 | 76.05 | 853.46 | 3563.35 |
9 | 929.51 | 61.35 | 868.16 | 2695.19 |
10 | 929.51 | 46.40 | 883.11 | 1812.09 |
11 | 929.51 | 31.20 | 898.31 | 913.78 |
12 | 929.51 | 15.73 | 913.78 | 0.00 |
可以看出, 上面的还款计划表跟最开始网上通过房贷计算器得到的一致, 我们再来看看, 招行的有个现金分期业务.
上面的分期费率12期, 0.75%(表面的月息=(3270*12-36000)/36000/12
), 申请分期36000, 每月还款3270. 通过上面的公式, 我们来看一下实际的费率情况, 月息相当于1.35%, 年利率 16.2%, 比表面的年息(0.75%*12=9%)
高不少.
>>> calcMonthRate(12, 36000, 3270)
0.013513565063476562
>>> calcMonthRate(12, 36000, 3270)*12
0.16216278076171875