有些銀行推銷的信用卡分期或貸款分期還款是這么計算的:
A: 貸款額
x: 名義月利率或者所謂的每月手續費
m: 還款期限,單位月
每月應還: (A+ x*A*m)/m
這個還款額把本金和利息平均在了每個月里, 但是仔細想想是有問題的:
還款中, 每個月都會還一部分本金, 但是利息還是按照總貸款額收取的, 也就是我已經還的那部分錢照樣被收取了利息。
所以實際利率是比它的名義利率要高, 但是要高多少呢, 可以計算一下:
如果按照正規的計算方法, 等額本息還款,計算公式應該是:
設y為實際月利率,
每月應還: A(y*(1+y)^m)/((1+y)^m-1) 推導過程可以參考 百度百科
讓兩個公式相等:
A(y*(1+y)^m)/((1+y)^m-1) = (A+ x*A*m)/m
=> (y*(1+y)^m)/((1+y)^m-1) - 1/m = x
求y, 不過這個方程看起來不太好解, 用python寫了個小程序, 迭代法求解:
#!/usr/bin/env python import sys def pm(y, m): return (y*(1+y)**m)/((1+y)**m-1)-1.0/m def calc(x, m): big = x while (1): lval = pm(big, m) if lval > x: break else: big+=0.001 small = big - 0.001 while (1): mid = (small+big)/2 lval = pm(mid, m) if abs(lval-x)<0.00000001 or small > big or small == big: return mid elif lval > x: big = mid else: small = mid def usage(): print 'Usage:' print 'calc.py nominal_rate(percent per month) period(months)' print 'Example: calc.py 0.5 36' try: rate = float(sys.argv[1])/100 month = int(sys.argv[2]) real = calc(rate, month)*100 print 'Real rate(month): ' + str(round(real, 4)) + '%' print 'Real rate(year) : ' + str(round(real*12, 4)) + '%' except Exception,err: #print str(err) usage()
假設js給的月利率0.5%, 貸36個月
運行: ./calc.py 0.5 36
結果:
Real rate(month): 0.9235%
Real rate(year) : 11.0825%
可以看到真實年利率可以達到11.08, 與名義上的6%高了不止一點