zoukankan      html  css  js  c++  java
  • [原创]分期还款的名义利率与真实利率

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

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

  • 相关阅读:
    逆序数———线段树/树状数组
    线段树 模板
    博弈论--对称博弈
    matlab程序设计
    matlab矩阵的操作
    2nd 历年学生作品评论(3部)
    1st 四人小组项目
    1st 本周工作量及进度统计
    1st 结对编程:简易四则运算
    1st 英文文章词频统计
  • 原文地址:https://www.cnblogs.com/hushpa/p/6140310.html
Copyright © 2011-2022 走看看