有些银行推销的信用卡分期或贷款分期还款是这么计算的:
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%高了不止一点