Java实现IRR及NPV

NPV计算参考

   public double npv(double r, double[] cfs) {
        double npv = 0.0D;
        double r1 = r + 1.0D;
        double trate = r1;
        int i = 0;

        for(int iSize = cfs.length; i < iSize; ++i) {
            npv += cfs[i] / trate;
            trate *= r1;
        }

        return npv;
    }
      public static void main(String[] args) {
            double rate = 0.1;  // 贴现率
            double[] values = {1000, 500, 300, 200};  // 现金流量
            double npv = npv(0.1,values);
            System.out.println("输出==="+npv);
        }

IRR计算参考

  public static double irr(double[] values, double guess) {
        double x0 = guess;

        for(int i = 0; i < 20; ++i) {
            double factor = 1.0D + x0;
            double denominator = factor;
            if (factor == 0.0D) {
                return 0.0D / 0.0;
            }

            double fValue = values[0];
            double fDerivative = 0.0D;

            for(int k = 1; k < values.length; ++k) {
                double value = values[k];
                fValue += value / denominator;
                denominator *= factor;
                fDerivative -= (double)k * value / denominator;
            }

            if (fDerivative == 0.0D) {
                return 0.0D / 0.0;
            }

            double x1 = x0 - fValue / fDerivative;
            if (Math.abs(x1 - x0) <= 1.0E-7D) {
                return x1;
            }

            x0 = x1;
        }

        return 0.0D / 0.0;
    }
     public static void main(String[] args) {
            double rate = 0.1;  // 贴现率
            double[] values = {-1000.0, -500.0, 300.0, 200.0};  // 现金流量
            double irr = Irr.irr(values,0.1);
            System.out.println("输出==="+irr);
        }
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值