题目描述:
在金融中,我们有时会用内部收益率IRR来评价项目的投资财务效益,它等于使得投资净现值NPV等于0的贴现率。换句话说,给定项目的期数T、初始现金流CF0和项目各期的现金流CF1, CF2, ...,CFT,IRR是下面方程的解:
为了简单起见,本题假定:除了项目启动时有一笔投入(即初始现金流CF0 < 0)之外,其余各期均能赚钱(即对于所有i=1,2,...,T,CFi > 0)。根据定义,IRR可以是负数,但不能大于-1。
代码:
package lanqiao;import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.*;public class Main {static String str = "";public static void main(String[] args) {DecimalFormat format=new DecimalFormat("##0.00");Scanner sc = new Scanner(System.in);while(true){int T = sc.nextInt();double cf[] = new double[T + 1];if(T == 0) break;else{for(int i = 0;i <= T;i ++)cf[i] = sc.nextInt();double L = -1.0;double R = 9999.0;for(int i = 0;i < 100;i ++){double IRR = (L + R) / 2;double sum =0;double den = 1;for(int k = 0;k <= T;k ++){sum += cf[k] / den;den *= (1 + IRR);}if(sum > 0){L = IRR;}else{R = IRR;}}str+=format.format(R)+"\n";}}System.out.println(str);}
}