2014-04-04 4 views
5

Nie jestem w stanie obliczyć IRR. Jestem usign Microsoft.VisualBasic do obliczenia IRR. Tutaj jest to przypadek:Financial.IRR nie jest obliczany w 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; 
      } 


     } 

Daje wyjątek typu "argument nie ma" (na Microsoft.VisualBasic.Financial.IRR (Podwójne [] & ValueArray, dwukrotnie Guess)). Jednak to nie pokazuje żadnych błędów, jeśli wykonuję obliczenia w programie Excel.

Odpowiedz

4

Musisz podać dobrą wartość Zgadnij jako drugi parametr tego interfejsu API. Domyślna wartość 0.1 nie udaje się dla twoich danych wejściowych.

Spróbuj tego:

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

i powinien wrócić IRR of -0.2987

Wygląda API obsługuje tylko konkretne przypadki i nie wejść na innych dla każdej odgadnięcia. To jest błąd API IRR dla Microsoft uznany tutaj.

Lepiej odliczaj IRR, korzystając z wiarygodnej biblioteki innej firmy, jeśli sprawa Zgadnij.

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

Powodem dostaniesz wyjątek Argument is not valid dlatego, że IRR nie może być obliczona dla wartości domyślnej Guess 0,1. Należy zauważyć, że podane wartości spełniają warunek jednej wartości ujemnej (płatności) i jednej wartości dodatniej. (paragon)

Wewnętrznie, **Microsoft.VisualBasic.Financial.IRR** przechodzi przez wartości wejściowe i próbuje obliczyć wartość IRR w ciągu 40 iteracji. Nigdy nie napotyka warunku zerwania dla prawidłowej IRR, a zatem ostatecznie rzuca ten błąd.

Zauważ, że Excel daje wartość -30%.

W tym samym czasie, próby IRR w szyku, jak

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

daje IRR 2,0 lub 200%. (zarówno przez kod i Excel)

+0

to rzeczywiście poprawne dane. IRR staje się dodatnia po 60 miesiącach. Niestety funkcja ta nie jest w stanie pokazać mi wartości dodatniej. Zawsze daje mi błąd, jeśli pierwsze 10 pozycji jest takich, jakie widzisz powyżej. – renathy

+0

niewiele więcej badań i kodu znalazło szczegóły błędu Microsoftu –

Powiązane problemy