1. 程式人生 > >java月利率計算(等額本息貸款)

java月利率計算(等額本息貸款)

sys static res pack 次數 print exce pan string

等額本息 每月還款計算公式:

每月本息金額 = (本金×月利率×(1+月利率)^還款月數)÷ ((1+月利率)^還款月數-1))

反轉求出 月利率

月利率 如果根據上面公式反轉是算不出來的。

下面給出一種計算方式具體是試出來的,從1開始 一次減少0.1,,減到0.1後,每次再減少,0.01

/**
 * Project Name:cfss_asws1
 * File Name:NiTui.java
 * Package Name:test
 * Date:2018年8月16日下午5:40:07
 * Copyright (c) 2018
 * Company: 深圳平安綜合金融服務有限公司 All Rights Reserved.
 * 
 
*/ package org.agoncal.sample.jmh; /** * ClassName:NiTui <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2018年8月16日 下午5:40:07 <br/> * * @author ZHANGZHEN626 * @version * @since JDK 1.6 * @see */ public class NiTui { /** * * rate:(這裏用一句話描述這個方法的作用). <br/> * TODO(這裏描述這個方法適用條件 – 可選).<br/> * TODO(這裏描述這個方法的執行流程 – 可選).<br/> * TODO(這裏描述這個方法的使用方法 – 可選).<br/> * TODO(這裏描述這個方法的註意事項 – 可選).<br/> * *
@author ZHANGZHEN626 * @param a 貸款金額 * @param b 月供(每月還款金額) * @param c 還款期數 * @param cnt 叠代試的次數 * @param ina 精確到小數點後幾位。 * @return * @since JDK 1.6 */ 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[]) { { // Double 現值 = 7944760.00d; // Double 年金 = 186627.21d; // Double 期數 = 48d; // 計算200次,比Excel20次要精確,誤差精確到小數點後10位 System.out.println(rate(150000, 6000, 36, 2111, 10)); } } }

java月利率計算(等額本息貸款)