java 实现Excel irr计算(改进版)
2016-11-22 16:38
260 查看
import java.util.ArrayList; import java.util.List; public class IrrUtil { /**迭代次数*/ public static int LOOPNUM=1000; /**最小差异*/ public static final double MINDIF=0.00000001; /** * @desc 使用方法参考main方法 * @param cashFlow 资金流 * @return 收益率 */ public static double getIrr(List<Double> cashFlow){ double flowOut=cashFlow.get(0); double minValue=0d; double maxValue=1d; double testValue=0d; while(LOOPNUM>0){ testValue=(minValue+maxValue)/2; double npv=NPV(cashFlow,testValue); if(Math.abs(flowOut+npv)<MINDIF){ break; }else if(Math.abs(flowOut)>npv){ maxValue=testValue; }else{ minValue=testValue; } LOOPNUM--; } return testValue; } public static double NPV(List<Double> flowInArr,double rate){ double npv=0; for(int i=1;i<flowInArr.size();i++){ npv+=flowInArr.get(i)/Math.pow(1+rate, i); } return npv; } public static void main(String[] args) { double flowOut=-237000d; List<Double> flowInArr=new ArrayList<Double>(); flowInArr.add(flowOut); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); flowInArr.add(22643.999991d); System.out.println(IrrUtil.getIrr(flowInArr)*12); } }
相关文章推荐
- Excel中PMT计算月供函数的java实现
- Excel中PMT计算月供函数的java实现
- Excel中的部分计算函数 在Java中的实现
- Excel中PMT计算月供函数的java实现
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 用JAVA Excel API 实现对Excel表格的读写更新 (转)
- 用JAVA Excel API 实现对Excel表格的读写更新
- 用java实现浮点数的精确计算
- 在Java中实现浮点数的精确计算
- C#实现Excel跨文件多SHEET合并计算(原创)
- 在Java中实现浮点数的精确计算[摘]
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 用java实现计算日期
- Java大整数实现计算catalan数
- POI ,Java 操作 Excel 实现行的插入(insert row)
- 将后台数据读取到前台的EXCEL文件中去,用javascript实现,asp.net,javacript(发一个原创)
- 在Java中实现浮点数的精确计算
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 关于高精度正整数计算的JAVA实现
- C1FlexGrid中实现类似Excel单元格计算的功能