碼農唐磊 程序猿石頭
面試
你確定也常常收到各個銀行電話推銷,能夠辦理小額貸款/信用卡帳單分期/萬用金,或者其餘亂七八糟的名字的產品。
又或者接到電話說,「石頭先生,咱們有留意到您這個月帳單爲 X 萬元,請您放心,我此次打電話過來並非來催您還款的。基於您在我行的優質信用,咱們這邊能夠幫你申請延期還款,這個錢這個月不用還,下個月開始分期還,只須要每月還款 xx 元便可……」 (有印象麼?)
遂問電銷人員,大家這個最後年化利息多少?
這個時候,通常銀行客服都會直接回避這個問題,美其名曰:「咱們不收利息,咱們只收取必定的手續費,基於您這邊的良好信用,如今您有一筆5萬的額度是能夠當即提現的,能夠分12期還,每個月只須要XXXX元」。
可能不太懂的同窗,聽到銀行客服同窗的宣傳,感受這利率還不算貴,缺錢急用還挺划算的啊。有可能直接被套路,就接受了忽悠,辦理了這個貸款/分期產品。算法
下面我以浦發銀行實際例子來算一下,相似產品最後年化利率究竟是多少。
如上圖所示,是浦發銀行的某名叫「萬用金」的產品,能夠看到,提現 10000 元,分 12 期(即分12個月)還錢,等額本息的還款方式,每個月需還款 929.51 元。小程序
初步計算你可能會簡單的認爲這個利率就是,一共還的錢爲929.5112,而後借款本金爲10000元,那麼年化利率即爲:(929.5112 - 10000)/10000*100%=11.54%,感受還行啊,不誇張。
可是事實上,這種算法是有問題的,由於你借款的本金10000元,並無享受到1年的期限,之後每月都還了本金呀。ide
咱們用網上常見的房貸/借款計算器[1]來算一下, 若是按照年化11.54%來計算, 每個月的還款狀況應該以下,即每月只須要等額本息還款886.34,比929.51元少很多。
而若是每月還款 929.51 元的話, 其利率遠遠不止11.54%,直接仍然用那個借款計算器大概估計一下。
貌似現有的網上的工具都只能正向算,即已知利率和貸款本金計算還款計劃表, 沒有一個工具能從每個月還款額反推貸款利率, 初步屢次嘗試獲得以下近似結果。(注:本文最初爲2017 年寫的文章,如今網上也有相似的計算器了,你能夠直接用後文中的方法進行計算。)
能夠看到,年化利率達到了20.66%,比以前預想一想象中多太多了。
因此電話銷售在推銷的時候,每每不會直接告訴你這個年化利率,由於過高了,說了你可能不太會接受。
實際上,你借款本金 10000,並無享受到全年,而是隻享受到了1個月,由於1個月以後,你就有歸還部分本金(和利息)了。
而這個利率究竟是怎麼計算來的呢? 爲啥會有先後這麼大的差異?我們繼續。
函數
這裏介紹一款小程序,本人 17 年左右寫的(當初市面上可很難搜索到),直接點擊下面的小程序便可使用。
工具
如上圖所示,直接輸入借款總額,月還款額以及還款月數,便可計算年化利率。後來有用戶反饋,但願有一個已知借款利率,正向計算還款計劃的功能,所以在以前又把這個功能給加上了,正向計算功能能夠分爲等額本息、等額本金以及先息後本一共三種還款方式計算。
正算還款計劃
要想看如何推導計算過程的,記得體驗小程序後,回來繼續看後文的分析哦。3d
藉助 Excel, 咱們也能夠方便的計算出正確的年化利率。
excel 計算年化利率
直接利用 Excel 裏面的 IRR 函數能夠直接計算,或者直接用 RATE函數計算也能夠。excel
沒思路的話,跟着個人節奏,我們一塊兒來。咱們來正向推導一下這個等額本息利率的計算過程。
假設借款總額爲 A, 月利率爲 R, 每個月還款額爲 M, 抓住一點,欠款總額爲本金*(1+月利率)則有:
推導過程(放大看)
因此,能獲得第 i 個月的欠款狀況,上面的公式能夠簡化一下,由於被減數 M 後邊的是一個等比數列,獲得第 i 個月後,欠款總額爲:
code
若是知道月利率 R, 要計算每月還款額也能夠直接經過上面這個公式獲得,
blog
仍然以上述浦發銀行的這個例子爲準,其中 A=10000, M=929.51,代入上面的公式就能夠算出 R 的值。
可是!上面這個方程如何解呢?
我們也能夠跟着 Excel 學嘛,人家都說了是用迭代法,我們也能夠哦。
本身寫了段小代碼迭代搜索一下能算出來。貌似這裏能出一道給程序猿的面試題目了,哈哈。
各位程序猿朋友們,看看有哪些方法可以算出來?我這邊暫時不公佈本身寫的這段代碼,看看你們有思路? (敲黑板)
經過計算獲得,借款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'
能夠看出,上面的還款計劃表跟最開始網上經過房貸計算器獲得的一致,咱們再來看看,招行的有個現金分期業務。
上面的分期費率12期, 0.75%(表面的月息=(327012-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
最後,來個小科普,針對貸款年化利率,有兩個數字做爲分割線,24% 和 36%。
因此,朋友們,下次銀行再給你打電話,你知道怎麼應付了吧?不再用被所謂的手續費利率(表面現象)所迷惑了哦!另外,請廣大的程序猿朋友們思考一下前面留出的問題哈,看看你們都有什麼方法來計算,歡迎留言討論。原創真心不易,但願你能幫我個小忙唄,若是本文內容你以爲有所啓發,有所收穫,請幫忙點個「在看」唄,或者轉發分享讓更多的小夥伴看到。