600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 等额本息还款方式的年利率计算方法及java代码实现

等额本息还款方式的年利率计算方法及java代码实现

时间:2024-01-29 16:18:53

相关推荐

等额本息还款方式的年利率计算方法及java代码实现

等额本息还款方式在生活中是很常用的,比如贷款买房,买车,信用卡分期还款,京东白条分期 ,等等,只要是借了钱,每月还款金额一样的,都属于等额本息的方式。有些时候我们贷款后,商家或银行告诉了每期的还款额,要算总还款是很简单(每期还款*期数),计算部利息也很容易(总还款-本金),但要计算年化利率就比较复杂了,年化利率还是一个比较重要的参数,它可更直观反应这次贷款的利率高低。本期给出计算方法及java代码实现,以及一些计算的例子:

计算方法:

假设:

贷款为B (本金)

期数为N

每期还款M

年化费率为X

则:

第一期还款(第一期还本金+第一期利息)M=B1 + B*X/12 //第一期的利息就是总本金B一个月的利息,就是年化费率除以12再乘以总本金(就是月费率乘以本金);

第二期还款(第二期还本金+第二期利息)M=B2 + (B-B1)*X/12 //第二期开始本金减少了,所以计算利息要减去已还的本金

第三期还款(第三期还本金+第三期利息)M=B3 + (B-B1-B2)*X/12

。。。

第N期还款(第N期还本金+第N期利息)M=Bn + (B-B1-B2-...-Bn-1)*X/12

构成一个方程组

M=B1 + B*X/12

M=B2 + (B-B1)*X/12

M=B3 + (B-B1-B2)*X/12

。。。

M=Bn + (B-B1-B2-...-Bn-1)*X/12

B=B1+B2+...+Bn

解方程组就可以得出年利率X;

java代码实现如下:使用了二分法来计算(使用二分法,相对于指数或对数的计算要快很多)

public class RateCalculator{public static void main(String[] args) {if (args.length < 3) {System.out.println("至少输入3个参数(贷款金额 还款期数 每月还款)!");return;}double Loan = Double.parseDouble(args[0]); //贷款金额(元)int months = Integer.parseInt(args[1]);//还款期数(月)double monthPay = Double.parseDouble(args[2]); //每月还款(元)double yearRate = rateCalculator(Loan,months,monthPay); //年化利率(%)System.out.println("贷款金额:" + Loan);System.out.println("还款期数:" + months);System.out.println("每月还款:" + monthPay);System.out.println("年化利率:" + String.format("%.2f", yearRate) + "%");}/*** 等额本息:已知每月还款额,计算年利率.** @param totalLoan 贷款总额(单位:元)* @param months 贷款期数(月数)* @param monthPay 每月还款额(元)* @return 年利率(%)*/public static double rateCalculator(double totalLoan, int months, double monthPay) {double monthRate; //月利率double[] monthPayLoan = new double[months]; //每期还的本金/*本算法采用二分法穷举第一月的还款本金来计算每月还款本金,计算出还的本金就可以得到月利率*/double low = 0;double up = totalLoan/months;boolean isFinish = false;int j=0;do {monthPayLoan[0] = (low+up)/2;monthRate = (monthPay - monthPayLoan[0]) / totalLoan;double havePayLoan = 0;double calculateLoan = monthPayLoan[0];for(int i=1; i<months; i++){havePayLoan += monthPayLoan[i-1];monthPayLoan[i] = monthPay-(totalLoan-havePayLoan)*monthRate;calculateLoan += monthPayLoan[i];}long calculate = Math.round(calculateLoan);long total = Math.round(totalLoan);if(calculate == total) {isFinish = true;} else if (calculate > total) {up = monthPayLoan[0];} else {low = monthPayLoan[0];}if(++j>30){isFinish = true;monthRate = -1;}} while(!isFinish);return monthRate*12*100;}}

验证算法的准确性,在网上找一个房贷计算器,计算一次房贷款:

如上,贷款100000,分24期,利率4.75%,每期还款4375.95

通过本算法反向计算出的年利率是4.75%是准确 的。

以下是一些实际的例子:

1,特期拉model3分期付款:

特期拉页面上的年化费率是不准确的,参考上期文章分析:

/zucheng10/article/details/108144693

实际计算结果为:

2,某购物网站的分期付款:iphone 11 max , 分24期:

3,某信用卡现金分期

可以看出信用卡的分期的年化利率还是比较高的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。