6

IRR を計算できません。IRR を計算するために Microsoft.VisualBasic を使用しています。ここにケースがあります:

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(Double[]& ValueArray, Double Guess) で)。ただし、Excel 内で計算を行うと、エラーは表示されません。

4

2 に答える 2

7

この API の 2 番目のパラメーターとして適切な Guess 値を指定する必要があります。入力のデフォルト値 0.1 は失敗します。

これを試して:

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

そして、あなたは戻ってくるはずですIRR of -0.2987

API は入力の特定のケースのみを処理し、他のケースでは失敗するようです。これは Microsoft の IRR API バグであり、こちらで確認されています。

推測が問題になる場合は、サードパーティの信頼できるライブラリを使用して IRR を計算することをお勧めします。

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

例外が発生する理由は、デフォルトのGuess 値 0.1Argument is not validに対して IRR を計算できないためです。与えられた値は、1 つの負の値 (支払い) と 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% の IRR が得られます。(コードと Excel の両方を使用)

于 2014-04-04T09:16:27.403 に答える