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);
}