文档章节

信用卡分期年化利率计算方法

大数据之路
 大数据之路
发布于 2012/08/30 20:29
字数 1998
阅读 141
收藏 0

背景

经常收到各个银行电话推销可以办理小额贷款/信用卡账单分期/万用金, 或者其他乱七八糟的名字的产品. 遂问电销人员, 你们这个最后年化利息多少? 这个时候, 一般销售人员都直接回避这个问题, 美其名曰: “我们不收利息, 我们只收取一定的手续费, 基于您这边的良好信用, 现在您有一笔5万的额度是可以立即提现的, 可以分12期还, 每月只需要XXXX元”

可能不太懂的同学, 听到电销的宣传, 感觉这利率还不算贵, 缺钱急用还挺划算的啊. 有可能直接被套路, 就接受了忽悠, 办理了这个贷款/分期产品.

下面我以浦发银行实际例子来算一下, 类似产品最后年化利率到底是多少.

如上图所示, 是浦发银行的贷款产品(万用金), 可以看到, 提现10000元, 分12期即分12个月还钱, 等额本息的还款方式, 每月需还款929.51元. 初略地看, 你可以会简单的认为这个利率就是, 一共还的钱为929.51*12, 然后借款本金为10000元, 那么年化利率即为: (929.51*12 - 10000)/10000*100%=11.54% 感觉似乎不那么高.

然而, 事实上, 这种算法是有问题的, 因为你借款的本金10000元, 并没有享受到1年的期限, 以后每个月都还了本金呀.

实际年化利率

我们用网上常见的房贷/借款计算器来算一下, 如果按照年化11.54%来计算, 每月的还款情况应该如下, 即每个月只需要等额本息还款886.34, 比929.51元少不少.

而如果每个月还款929.51元的话, 其利率远远不止11.54%, 直接仍然用那个借款计算器大概估计一下. 貌似现有的网上的工具都只能正向算, 即已知利率和贷款本金计算还款计划表, 没有一个工具能从每月还款额反推贷款利率, 初步多次尝试得到如下逼近的结果.

可以看到, 年化利率达到了20.66%, 比之前预想想象中多了太多了.
所以电话销售在推销的时候, 往往不会直接告诉你这个年化利率, 因为太高了, 说了你可能不太会接受.
而这个利率到底是怎么计算来的呢? 为啥会有前后这么大的差别?
实际上, 你借款本金1W并没有享受整年, 而是只享受到了1个月, 因为1个月之后, 你就有归还部分本金(和利息).

推导方法

我们来正向推到一下这个等额本息利率的计算过程.
假设借款总额为A, 月利率为R, 每月还款额为M, 抓住一点, 欠款总额为本金*(1+月利率)则有:

本来是markdown渲染的公式, 无奈结合table转成html之后太丑了, 于是就用截图的方式了, 点开后查看大图.

所以, 能得到第i个月的欠款情况, 上面的公式可以简化一下, 因为被减数M后边的是一个等比数列, 得到第i个月后, 欠款总额为

以上述浦发银行的这个例子为准, 其中A=10000, M=929.51, 代入上面的公式就可以算出R的值.
不太好直接解方程, 自己写了段小代码迭代搜索一下能算出来.

貌似这里能出一道给程序猿的面试题目了, 哈哈. 码农朋友们, 看看有哪些方法能够算出来? 我这边暂时不公布自己写的这段代码, 看看大家有思路? (敲黑板)
后面有空可以写个小程序, 供大家使用.

通过计算得到, 借款10000元, 每月还款额度为929.51元的情况下, 月利率为0.0171.7%, 年化利率即为 20.65%基本上与文首查到的一致. 月利率出来之后, 还款计划表也就自然而然能够出来了.

>>> monthRate = calcMonthRate(12, 10000, 929.51)

>>> print monthRate

0.0172138214111

>>> print monthRate * 12

0.206565856934

>>> schedules = repaymentSchedules(12, 10000, monthRate)

>>> for s in schedules: print s

...

[1, '929.49', '172.14', '757.35', '9242.65']

[2, '929.49', '159.10', '770.39', '8472.26']

[3, '929.49', '145.84', '783.65', '7688.61']

[4, '929.49', '132.35', '797.14', '6891.47']

[5, '929.49', '118.63', '810.86', '6080.61']

[6, '929.49', '104.67', '824.82', '5255.79']

[7, '929.49', '90.47', '839.02', '4416.77']

[8, '929.49', '76.03', '853.46', '3563.31']

[9, '929.49', '61.34', '868.15', '2695.16']

[10, '929.49', '46.39', '883.10', '1812.06']

[11, '929.49', '31.19', '898.30', '913.76']

[12, '929.49', '15.73', '913.76', '-0.00']

期数 还款本息 利息 本金 剩余本金
1 929.51 172.17 757.34 9242.66
2 929.51 159.13 770.38 8472.28
3 929.51 145.87 783.64 7688.64
4 929.51 132.38 797.13 6891.51
5 929.51 118.65 810.86 6080.65
6 929.51 104.69 824.82 5255.84
7 929.51 90.49 839.02 4416.82
8 929.51 76.05 853.46 3563.35
9 929.51 61.35 868.16 2695.19
10 929.51 46.40 883.11 1812.09
11 929.51 31.20 898.31 913.78
12 929.51 15.73 913.78 0.00

可以看出, 上面的还款计划表跟最开始网上通过房贷计算器得到的一致, 我们再来看看, 招行的有个现金分期业务.

上面的分期费率12期, 0.75%(表面的月息=(3270*12-36000)/36000/12), 申请分期36000, 每月还款3270. 通过上面的公式, 我们来看一下实际的费率情况, 月息相当于1.35%, 年利率 16.2%, 比表面的年息(0.75%*12=9%)高不少.

>>> calcMonthRate(12, 36000, 3270)

0.013513565063476562

>>> calcMonthRate(12, 36000, 3270)*12

0.16216278076171875

所以, 朋友们, 不要被表面现象所迷惑. 另外, 码农朋友们, 思考一下前面留出的问题哈, 看看大家都有什么方法来算.
欢迎留言讨论.

附:文中的年 利率计算代码

# 等额本息月供计算,P=贷款总额,nlx=年利率,month=贷款月数     【返回值】A=月供
def debx_calac(P=220500, nlx=0.0605, month=36):
    i = nlx / 12  # 公式里用的为月利率,年利率需要换算为月利率
    n = month
    A = P * (i * ((1 + i) ** n) / (((1 + i) ** n) - 1))  # 等额本息月供计算公式
    return A


# 计算贷款的实际利率(已知月供),P=贷款总额,A=月供,month=贷款月数,【返回值】i=实际利率
def debx_calac_lx(P=220500, A=6713, month=36):
    i = 0
    while i < 100:  # 根据假设利率计算月供和实际月供进行比较,找到实际利率
        i = i + 0.0001
        rA = debx_calac(P, i, month)  # 用假设利率计算月供
        if (int(rA) == int(A)):
            print(rA, A, i)
            return i


# 回报计算,用来计算每月需要付出月供的情况下的总回报和每月回报 P=贷款总额,hbl=预期回报率(年),payback=每月支付月供金额     ,【返回值:】allreback=总收益,monthback=每月收益
def huibaojisuan(P=220500, hbl=0.05, payback=6713):
    allreback = 0
    i = hbl / 12
    monthback = []

    while P > 0:
        sy = P * i  # 计算当月收益
        allreback = allreback + sy  # 总收益

        # P = P - payback + sy       #如果收益能够滚动成本金进行再投资,可以明显降低一些对回报率的需要
        P = P - payback  # 下月可投资本金扣除当月月供

        if P > 0:
            monthback.append((float('%.2f' % P), float('%.2f' % (sy))))
        else:
            monthback.append((0, float('%.2f' % (sy))))

    return allreback, monthback


# 需要多少利率能抵消利息即手续费开销,P=贷款总额,sxf=手续费(或其他一次性成本),nlx=年利率,month=贷款月数  ,【返回值】i=能覆盖成本的回报率
def howmanyRetrunCanbeenough(P=220500, sxf=6615, nlx=0.0605, month=36):
    ykk = debx_calac(P, nlx, month)  # 计算月供
    allCostmoney = sxf + (ykk - P / month) * month  # 计算手续费和全部利息开销之和
    print('allCostmoney {}:'.format(allCostmoney))

    i = 0
    while i < 100:  # 循环寻找最小能覆盖成本的投资收益率
        i = i + 0.001
        hbe, alb = huibaojisuan(P, i, ykk)
        if (hbe > allCostmoney):  # 将总成本和回报进行比较
            print(i)
            return i


if __name__ == '__main__':
    # howmanyRetrunCanbeenough()
    debx_calac_lx(10000, 929.51, 12)
    # 929.0033420430676 929.51 0.2055500000000648

Refer:

[1] 信用卡分期年化利率计算方法

https://www.tanglei.name/blog/the-way-to-calculate-apr.html

[2] 车贷计算.py

https://github.com/djl654321/calc_carcredits/blob/master/%E8%BD%A6%E8%B4%B7%E8%AE%A1%E7%AE%97.py

[3] 随机地买理财,一键算整体回报

http://bit.ly/2uQa97E

本文转载自:https://www.tanglei.name/blog/the-way-to-calculate-apr.html

大数据之路
粉丝 1601
博文 515
码字总数 333234
作品 0
武汉
架构师
私信 提问
P2P之后,信用卡代还还会被玩坏吗?

在国家出台多项“普惠金融”政策、监管却日趋严厉的大环境下,互联网金融客群却呈现逐步探低的趋势。此前追求高风险、高收益的部分互金业务,如P2P、小贷等,也向下“降级”,开拓新的市场。...

周蕾
2018/05/17
0
0
银行是利益机构,不是慈善机构,且用且谨慎……

这样的一则新闻: 黄女士错给亡夫的账户存5万块,因无法取得亡夫账户的密码,无法将钱取出,黄女士要求银行将钱还于本人。 黄女士出具了相关的死亡证明,银行仍然拒绝黄女士的请求,银行称:...

众借帮
2018/05/25
0
0
信用卡代app代还信用卡方式不同手续费相差十万八千里

作为一个购物发烧友,有事没事都喜欢出门溜达,而在溜达过程中,看着喜欢的合意的只要价格还能接受往往都会买下来,逢出门基本都满载而归,而这样一种消费习惯,更是随着手机支付、网络消费的...

卡卡乐
2018/05/25
0
0
信用卡还款如何选择可靠的代还平台

  根据统计,截至2017年末,我国信用卡和借贷合一卡在用发卡量共计5.88亿张 ,同比增长26.35%,全国人均持有信用卡0.39张,同比增长25.82%。央行数据显示,2016年信用卡卡均授信额度为1.9...

ruqiapp66
2018/05/28
0
0
如何评价替你还、省呗、还呗这些信用借贷产品?

对卡奴们来说,因为深刻体会过“刷卡一时爽,还款火葬场”的感觉,所以一人拥有多张信用卡是件很稀疏平常的事情。但以卡还卡并不是长久之计,一旦无法及时还款,用户将要承担透支利率、支付一...

卡卡乐
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
10
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
23
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部