2014-04-04 38 views
5

我無法計算內部收益率。我正在使用Microsoft.VisualBasic來計算內部收益率。這裏有一個案例:Financial.IRR未在C#中計算

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


     } 

它給出類型的異常 「參數無效」(在Microsoft.VisualBasic.Financial.IRR(雙人間[] & ValueArray,雙猜))。 但是,如果我在Excel中進行計算,則不會顯示任何錯誤。

回答

4

您需要提供一個良好的猜測值作爲此API的第二個參數。輸入的默認值爲0.1。

試試這個:

double tmpIrr = Financial.IRR(ref tmpCashflows, 0.3); 

,你應該得到回一個IRR of -0.2987

它看起來像API只處理輸入特定的情況下,未能對別人的任何猜測。這是微軟在這裏承認的IRR API Bug。

如果Guess成爲問題,您最好使用第三方可靠庫計算IRR。

http://connect.microsoft.com/VisualStudio/feedback/details/781299/microsoft-visualbasic-financial-irr-doesnt-solve-for-irr-correctly-in-certain-cases-with-any-guess

的原因,你得到一個Argument is not valid例外是因爲IRR不能爲0.1默認猜測值來計算。請注意,給定值滿足一個負值(支付)和一個正值的條件。 (收據)

在內部,**Microsoft.VisualBasic.Financial.IRR**檢查輸入值並嘗試計算40次迭代的IRR。它從來沒有遇到有效IRR的破壞條件,因此最終拋出這個錯誤。

請注意,Excel給出的值爲-30%。

同時,試圖爲一個陣列的IRR等

tmpCashflows = new double[] { -100, 200, 300 }; 
double tmpIrr = Microsoft.VisualBasic.Financial.IRR(ref tmpCashflows); 

給出2.0或200%的內部收益率。 (通過代碼和Excel)

+0

這些實際上是正確的數據。 IRR在60個月後變爲正值。不幸的是,這個功能無法讓我看到正面的價值。如果前10個項目如上所示,它總是會給我錯誤。 – renathy

+0

多一點研究和代碼發現了微軟的bug細節 –