信用卡分期手续费率与贷款利率间的相互转换
2016-10-08 16:17
239 查看
背景
近期遇到的一个真实事件:中信银行给我打电话,说我的信用卡欠款可以分期归还,手续费折算到每月大约是0.57%。手续费需要在第一个月全额支付。比如我分期12000元,则第一个月应还:
1000+(12000×0.0057×12)=1820.8
从第二个月开始,每个月还1000
另一方面,蚂蚁花呗贷款日息是万2,也就是10000块钱每日利息2块钱,月利率大约是0.6%。
问题来了,中信银行的信用卡欠款,是分期比较划算,还是从蚂蚁花呗借款(12个月,按月等额本息还款)来还划算?
我第一感觉是手续费率较低,当时正好钱荒,所以当场就办理了分期。回头一想似乎不对,于是拿出手机打开支付宝算了算:
总利息是480.03元,而前述手续费是820.80元,比较下来等额本息要少还不少利息。
其实仔细想想就能明白,无论等额本金还是等额本息还款,用来计算利息的本金都是逐月减少,但用来计算分期手续费的本金则是始终等于借款总额,这个差异点使得分期手续费率与贷款利率之间不能直接比较。
既然不能直接比较,它们之间应如何转换?本文就这个问题做了些探讨。先说下结论,在分期手续费率不高(月费率小于1%)的情况下,通常可以直接按照2倍来估算对应的贷款利率(此时等额本金、等额本息差别不大)。此结论有助于在不同资金操作方式间进行比较。
约定
月手续费率:x月贷款利率:y
月份数:m
总利息:P
借款总数:A
等效贷款数:A′
解释下借款总数与等效贷款数之间的关系:一般银行的手续费分为首月付清或者末月付清,而不是逐月支付
- 如果是首月付清手续费,则用户实际可用款项是借款总数减去手续费,而不是全部借款,此时相当于贷款A′=A−A×m×x
- 如果是末月付清手续费,则等效贷款数等于借款总数A′=A
基于以上讨论,引入“贷借比”k=A′A
k={1−mx1(首月付清手续费)(末月付清手续费)
推导
所谓手续费率与贷款利率的“等效关系”是基于以下条件:双方所计算出来的应付总利息相等。分期手续费率总利息:
P=A×m×x
等额本金
如果是贷款且使用等额本金方式还款,则应付利息为:第1个月:A′y=A′ymm
第2个月:(A′−A′m)y=A′y(m−1)m
…
第n个月:(A′−A′(n−1)m)y=A′y(m+1−n)m
…
总利息:P=A′y[m+(m−1)+...+1]m=A′y(m+1)2
所以应有:
Amx=A′ym+12
⟺
y=2mxk(m+1)
等额本息
等额本息下,每月还款额是X=A′y(1+y)m[(1+y)m−1]
推导过程不赘述,参考这里
总利息:
P=mX−A′=A′{my(1+y)m[(1+y)m−1]−1}
⟺
Amx=A′{my(1+y)m[(1+y)m−1]−1}
⟺
kmy(1+y)m−k[(1+y)m−1]−mx[(1+y)m−1]=0
⟺
kmy(1+y)m−(k+mx)(1+y)m+(k+mx)=0(1)
我数学知识忘得差不多了…以上表达式无法直观的看出符号解y=f(x),只好求助于matlab。
代码
matlab是处理数学问题和绘制函数图像首选。等额本金
function [y] = principal(x, m, pre_pay) %Matching principal if pre_pay k = 1 - x .* m; else k = ones(1, length(x)); end y = 2 * m .* x ./ (k .* (m + 1)); end
等额本息
等额本息换算公式较为复杂,(1)并非标准的多项式形式,我们做个转换:令t=1+y,则(1)转换为
km(t−1)tm−(k+mx)tm+(k+mx)=0
⟺
kmtm+1−(km+k+mx)tm+(k+mx)=0(2)
(2)是标准的多项式形式,可以用matlab的roots函数求解,需要过滤掉复数解以及t=1的解(注意到roots是求数值解,有一定误差,所以实际代码中采用了更宽松的判断条件)。
function [y] = interest(x, m, pre_pay) %Matching interest if pre_pay k = 1 - x .* m; else k = ones(1, length(x)); end rows = length(x); p = zeros(rows, m + 2); p(:, 1) = k .* m; p(:, 2) = -(k .* m + k + x .* m); p(:, m + 2) = k + x .* m; y = []; for i = 1:rows t = roots(p(i, :)); t_rows = 1; for j = 1:length(t) if isreal(t(j)) && t(j) > 1 + x(i) y(t_rows, i) = t(j) - 1; t_rows = t_rows + 1; end end end end
结论
以分12期为例。在matlab中使用以下代码来看y=f(x)图形变化趋势x = linspace(0, 0.04); y1 = principal(x, 12, 1); y2 = principal(x, 12, 0); y3 = interest(x, 12, 1); y4 = interest(x, 12, 0); y5 = x .* 2; figure; plot(x, y1, 'r', x, y2, 'g', x, y3, 'b', x, y4, 'c', x, y5, 'k.'), grid; xlabel('手续费率'); ylabel('等效利率'); legend('等额本金,手续费首月付清', '等额本金,手续费末月付清', '等额本息,手续费首月付清', '等额本息,手续费末月付清', '2倍手续费率', 'Location', 'northwest');
可以看到,等效的贷款利率通常远高于对应的分期手续费率。在分期手续费率较小时,等效贷款利率约2倍于手续费率。
开篇提到中信银行的分期月手续费率为0.57%(首月支付),那么对应的等额本息等效月利率是
>> interest(0.0057, 12, 1) ans = 0.0111
即1.11%。
相关文章推荐
- 2009年7月小记(WCF限流行为, 网站性能设置, 序列化的性能, 读取内嵌资源文件, WMI, declarative, XML声明, 相互转换)
- NSDate和NSString的相互转换
- 十进制与二进制的相互转换
- 关于datetime 和 int 之间相互转换
- 有关编码(GBK、utf-8、iso8859-1、)相互转换问题
- python实现颜色rgb和hex相互转换的函数
- Jquery对象和JS对象的相互转换
- 新旧身份证合法性验证及相互转换算法
- JavaScript对象与JSON字符串的相互转换
- 关于JSON中字符串与java对象的相互转换问题
- C++ char*,const char*,string的相互转换
- js数组与字符串的相互转换方法
- Android px、dp、sp之间相互转换
- XML与数组的相互转换
- string 和 int类型的相互转换
- C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- string和数字类型相互转换
- Enum与enum名字相互转换
- string对象与数值相互转换
- java中Sting, int, char 如何相互转换