等额本息贷款 ——已知贷款本金、月还款额、贷款月数,反推贷款月利率、年利率-java实现

等额本息 每月还款计算公式:

每月本息金额 = (本金×月利率×(1+月利率)^还款月数)÷ ((1+月利率)^还款月数-1))

反转求出 月利率

月利率 如果根据上面公式反转是算不出来的。

下面给出一种计算方式具体是试出来的,从1开始 一次减少0.1,,减到0.1后,每次再减少,0.01

import java.util.Scanner;

public class Rate {

    public static double rate(double a, double b, double c, int cnt, int ina) {
        double rate = 1, x, jd = 0.1, side = 0.1, i = 1;
        do {
            x = a / b - (Math.pow(1 + rate, c) - 1) / (Math.pow(rate + 1, c) * rate);
            if (x * side > 0) {
                side = -side;
                jd *= 10;
            }
            rate += side / jd;
        } while (i++ < cnt && Math.abs(x) >= 1 / Math.pow(10, ina));
//        if (i > cnt)
//            return Double.NaN;
        return rate;
    }


    public static void main(String agrs[]) {
        {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入借款本金:");
            double a = sc.nextDouble();
            System.out.print("请输入月还款额:");
            double b = sc.nextDouble();
            System.out.print("请输入还款月数:");
            int c = sc.nextInt();
            System.out.print("请输入计算次数(次数越高越准确,推荐大于200):");
            int cnt = sc.nextInt();
            System.out.print("请输入精确位数:");
            int ina = sc.nextInt();
            // Double 现值 = 7944760.00d;
            // Double 年金 = 186627.21d;
            // Double 期数 = 48d;

            // 计算200次,比Excel20次要精确,误差精确到小数点后10位
            double rate = rate(a, b, c, cnt, ina)*100;
            double yearRate = rate * 12;
            System.out.println("月利率:"+rate+"%,年利率:"+yearRate+"%");
        }
    }
}

结论:假如借10000元,每月还款1000元,分12个月,利率不是简单的2000/10000=20%,由上述算法得出利率为35.07%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值