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

  • 相关阅读:
    Python打包之pyinstaller
    Python关于Pyqt
    Python撰写mail
    后台管理左侧菜单
    全选反选以及取消
    模态对话框
    Spark2.3.1版本全分布模式的安装与部署
    Kafka消息格式及多版本支持
    2019-11-18-plot作图
    剑指Offer-知识迁移能力53-59
  • 原文地址:https://www.cnblogs.com/hushpa/p/6140310.html
Copyright © 2011-2022 走看看