投资回报净现值公式

我是社区第55902位番薯,欢迎点我头像关注我哦~
  1. package com.fr.stable.fun;

  2. import java.math.BigDecimal;

  3. import com.fr.general.FArray;
  4. import com.fr.script.AbstractFunction;
  5. import com.fr.stable.Primitive;

  6. public class NPV extends AbstractFunction {

  7.         private static final long serialVersionUID = -6688689751867351315L;

  8.         @Override
  9.         public Object run(Object[] params) {
  10.                 if(null == params || params.length<2 || params.length>3){
  11.                         return Primitive.ERROR_VALUE;
  12.                 }
  13.                 switch(params.length){
  14.                 case 2:
  15.                         if(!(params[0] instanceof FArray)){
  16.                                 return Primitive.ERROR_VALUE;
  17.                         }
  18.                         double ic = ((BigDecimal)params[1]).doubleValue();
  19.                         return npv(trans((FArray)params[0]),ic);
  20.                 case 3:
  21.                         if(!(params[0] instanceof FArray) || !(params[1] instanceof FArray)){
  22.                                 return Primitive.ERROR_VALUE;
  23.                         }
  24.                         ic = ((BigDecimal)params[2]).doubleValue();
  25.                         return npv(trans((FArray)params[0]),trans((FArray)params[1]),ic);
  26.                 default:
  27.                         return Primitive.ERROR_VALUE;
  28.                 }
  29.         }
  30.        
  31.         private FArray<BigDecimal> trans(FArray in){
  32.                 FArray<BigDecimal> rt = new FArray<BigDecimal>();
  33.                 for(int i=0;i<in.length();i++){
  34.                         Object ele = in.elementAt(i);
  35.                         if(ele instanceof String){
  36.                                 String val = (String) ele;
  37.                                 rt.add(new BigDecimal(val));
  38.                         }else if(ele instanceof Integer){
  39.                                 Integer val = (Integer) ele ;
  40.                                 rt.add(new BigDecimal(val));
  41.                         }else if(ele instanceof Float){
  42.                                 Float val = (Float) ele;
  43.                                 rt.add(new BigDecimal(val));
  44.                         }else if(ele instanceof Double){
  45.                                 Double val = (Double) ele;
  46.                                 rt.add(new BigDecimal(val));
  47.                         }else if(ele instanceof Long){
  48.                                 Long val = (Long) ele;
  49.                                 rt.add(new BigDecimal(val));
  50.                         }else{
  51.                                 rt.add((BigDecimal) ele);
  52.                         }
  53.                 }
  54.                 return rt;
  55.         }
  56.        
  57.         private Object npv(FArray<BigDecimal> cio,double ic){
  58.                 if(null == cio){
  59.                         return Primitive.ERROR_VALUE;
  60.                 }
  61.                 int t = cio.length();
  62.                 double sum = 0.0;
  63.                 double  crtic = 1;
  64.                 for(int i=0;i<t;i++){
  65.                         crtic *= (1+ic);
  66.                         sum += cio.elementAt(i).doubleValue()/crtic;
  67.                 }
  68.                 return sum;
  69.         }
  70.        
  71.         private Object npv(FArray<BigDecimal> ci,FArray<BigDecimal> co,double ic){
  72.                 if(ci ==null || co == null){
  73.                         return Primitive.ERROR_VALUE;
  74.                 }
  75.                 if(ci.length() != co.length()){
  76.                         return Primitive.ERROR_VALUE;
  77.                 }
  78.                
  79.                 FArray<BigDecimal> cio = new FArray<BigDecimal>();
  80.                 for(int i=0;i<ci.length();i++){
  81.                         cio.add(ci.elementAt(i).subtract(co.elementAt(i)));
  82.                 }
  83.                 return npv(cio,ic);
  84.         }
  85. }
复制代码


我简单粗暴上代码~
1.jpg

参与人数 +1 F豆 +1 理由
windy_gui + 1

查看全部评分

发表于 2017-1-10 20:22:28
6666,一语不合就开挂的节奏
发表于 2017-5-8 17:14:00
发表于 2017-5-9 15:56:28
学习了。迈神的,每次都很深奥啊
发表于 2017-5-24 09:40:27
谢谢,只需要把代码写进去吗?
发表于 2017-5-26 12:26:38
大神 开发一个 IRR 的自定义函数吧  财务方面这个公式挺需要的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

8回帖数 1关注人数 2344浏览人数
最后回复于:2017-5-27 10:31

返回顶部 返回列表