import java.util.Arrays;
import java.util.Scanner;
public class InvestmentReturnCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 获取项目投资额
System.out.print("请输入项目投资额: ");
double investmentAmount = scanner.nextDouble();
// 获取项目未来一段时间内的现金流量
System.out.print("请输入项目未来一段时间内的现金流量(投资几年): ");
double[] cashFlows = new double[scanner.nextInt()];
for (int i = 0; i < cashFlows.length; i++) {
System.out.print("请输入第" + (i + 1) + "年的现金流量: ");
cashFlows[i] = scanner.nextDouble();
}
// 计算投资回收率
double npv = calculateNetPresentValue(investmentAmount, cashFlows);
double irr = calculateInternalRateOfReturn(investmentAmount, cashFlows);
System.out.println("净现值为: " + npv);
System.out.println("投资回收率为: " + irr);
}
/**
* 计算净现值
*/
public static double calculateNetPresentValue(double investmentAmount, double[] cashFlows) {
double npv = -investmentAmount;
for (int i = 0; i < cashFlows.length; i++) {
npv += cashFlows[i] / Math.pow(1 + calculateInternalRateOfReturn(investmentAmount, cashFlows), i + 1);
}
return npv;
}
/**
* 计算内部收益率
*/
public static double calculateInternalRateOfReturn(double investmentAmount, double[] cashFlows) {
double irr = 0;
double npv = 0;
double irrStep = 0.0001;
double minValue = Double.MAX_VALUE;
for (double rate = 0; rate <= 1; rate += irrStep) {
npv = -investmentAmount;
for (int i = 0; i < cashFlows.length; i++) {
npv += cashFlows[i] / Math.pow(1 + rate, i + 1);
}
double diff = Math.abs(npv);
if (diff < minValue) {
minValue = diff;
irr = rate;
}
}
return irr;
}
}
このコードでは、2 つのメソッドを使用して投資収益率と正味現在価値を計算しました。
● CalculateNetPresentValue: このメソッドは、プロジェクトの正味現在価値を計算するために使用されます。 。正味現在価値とは、プロジェクトの将来キャッシュフローの現在価値の合計と投資額との差を指します。このメソッドのパラメーターには、プロジェクトの投資額と将来期間のキャッシュ フロー配列が含まれ、戻り値は正味現在価値です。
● CalculateInternalRateOfReturn: このメソッドは、プロジェクトの内部収益率を計算するために使用されます。内部収益率は、プロジェクトの正味現在価値をゼロにする割引率です。