我无法计算内部收益率.我使用Microsoft.VisualBasic来计算IRR.这是一个案例:
using Microsoft.VisualBasic;
...
static void Main(string[] args)
{
double[] tmpCashflows = new double[] {
-480117.0,
4471.5158140594149,
6841.5950239895265,
6550.383550359461,
6295.8611873818609,
6074.6070899770129,
5883.532880960287,
6006.9907860976427,
6133.1633945923877
,6262.1156759885489
//,6393.9143799520116
};
decimal irr = 0;
try
{
double tmpIrr = Financial.IRR(ref tmpCashflows);
...
}
catch (Exception ex)
{
irr = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
它给出了"参数无效"类型的例外(在Microsoft.VisualBasic.Financial.IRR(Double []&ValueArray,Double Guess)).但是,如果我在Excel中进行计算,则不会显示任何错误.
您需要提供一个好的Guess值作为此API的第二个参数。输入的默认值0.1失败。
尝试这个:
double tmpIrr = Financial.IRR(ref tmpCashflows, 0.3);
Run Code Online (Sandbox Code Playgroud)
你应该回来 IRR of -0.2987
看起来该API仅处理输入的特定情况,而在其他情况下则无法进行猜测。这是在此确认的Microsoft的IRR API错误。
如果Guess成为问题,则最好使用第三方可靠库来计算IRR。
出现Argument is not valid异常的原因是,无法为默认的Guess值0.1计算IRR 。注意,给定值满足一个负值(支付)和一个正值的条件。(收据)
在内部,**Microsoft.VisualBasic.Financial.IRR**遍历输入值并尝试计算40次迭代中的IRR。它永远不会遇到有效IRR的破坏条件,因此最终会引发此错误。
请注意,Excel的值为-30%。
同时,为类似的数组尝试IRR
tmpCashflows = new double[] { -100, 200, 300 };
double tmpIrr = Microsoft.VisualBasic.Financial.IRR(ref tmpCashflows);
Run Code Online (Sandbox Code Playgroud)
得出内部收益率为2.0或200%。(通过代码和Excel)
| 归档时间: |
|
| 查看次数: |
5162 次 |
| 最近记录: |