本文包含每個人都應該瞭解的金融小知識 -- 利率的計算方法, 以及在推導過程中衍生出的一道碼農面試題. 歡迎大家留言討論(本文首發於微信公眾號 "唐磊Coder"(微信ID: tangleithu), 歡迎掃描文末二維碼關注).
背景
經常收到各個銀行電話推銷可以辦理小額貸款/信用卡賬單分期/萬用金, 或者其他亂七八糟的名字的產品. 遂問電銷人員, 你們這個最後年化利息多少? 這個時候, 一般銷售人員都直接回避這個問題, 美其名曰: "我們不收利息, 我們只收取一定的手續費, 基於您這邊的良好信用, 現在您有一筆5萬的額度是可以立即提現的, 可以分12期還, 每月只需要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 monthRate
0.0172138214111
>>> print monthRate * 12
0.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複製程式碼
所以, 朋友們, 不要被表面現象所迷惑. 另外, 碼農朋友們, 思考一下前面留出的問題哈, 看看大家都有什麼方法來算. (最好實打實地coding出來看看?)
歡迎留言討論. 歡迎大家關注我的微信公眾號.