Java教程

java代码实现Excel irr计算

本文主要是介绍java代码实现Excel irr计算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/**
 * 综合年利率工具类
 */
public class ComprehensiveAnnualRateUtil {
	
	/**
	 * 计算综合年利率
	 * 	计算公式 irr * loanTerm * 100 【100代表100%】
	 * @param list 【第一个元素为本金的负数,后面为每期应还金额(本金+利息)】
	 * @param loanTerm
	 * @return
	 */
	public static String calaulate(List<String> list, int loanTerm) {
		/**	计算公式 irr * 期数 * 100 【100代表100%】*/
		double irr = new BigDecimal(calculator(list, loanTerm)).multiply(new BigDecimal(loanTerm)).multiply(new BigDecimal("100")).doubleValue();
		DecimalFormat df = new DecimalFormat("0.00");
		return df.format(Math.abs(irr));
	}
	
	private static double NPV(double r, List<String> netCash) {
		 
		double npv = 0;
 
		if (netCash.size() != 0) {
			for (int count = 0; count < netCash.size(); count++) {
				npv += Double.valueOf(netCash.get(count).toString()) / Math.pow(1 + r, count);
			}
			return npv;
		}
		return Double.NaN;
	}
	
	/**
	 * IRR函数
	 * @author: wgc
	 * @date: 2021年4月30日 下午5:04:50 
	 * @param netCashArr
	 * @param interval
	 * @return
	 */
	private static double calculator(List<String> netCashArr, int interval) {
		
		double MINDIF = 0.001;
		 
		int LOOPNUM = 2000;
 
		double irr = 0;
		double r1 = new BigDecimal("0.1").doubleValue();
		double r2 = new BigDecimal("0.09").doubleValue();
		double npv1 = NPV(r1, netCashArr);
		double npv2 = NPV(r2, netCashArr);
		int count = 0;
		while (Math.abs(npv2) > MINDIF & count < LOOPNUM) {
			irr = r2 - npv2 * (r2 - r1) / (npv2 - npv1);
			r1 = r2;
			r2 = irr;
			npv1 = npv2;
			npv2 = NPV(r2, netCashArr);
			count++;
		}
		if (Math.abs(npv2) < MINDIF & count <= LOOPNUM)
			return irr;
		else
			return Double.NaN;
	}

}
这篇关于java代码实现Excel irr计算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!