[原创]分期还款的名义利率与真实利率

有些银行推销的信用卡分期或贷款分期还款是这么计算的:

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%高了不止一点

原文地址:https://www.cnblogs.com/hushpa/p/6140310.html