2

C#コードに「変換」しようとしているExcel数式があります。

これは、一定期間 (たとえば 20 年) の "年金率" を計算するために使用されます。

=(((1+E26/100)^D28*((1+E26/100)-1))/((1+E26/100)^D28-1))*100

D28 = 20 (年)

E26 = 5,00 (率はパーセント)

^はExcel の指数を表します

これらの数字の結果として、私は年率 8.02% を期待しています。

Math.Pow を使用していくつかのアプローチを試みましたが、成功しませんでした。

これが私の最初のアプローチで、どういうわけか5の結果が得られます。

double usagePanels = 20.0
double rate = 5.0
annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
           ((1 + rate / 100) - 1) /
           Math.Pow(1+rate/100, (usagePanels-1))) * 100;

ありがとうございました。

4

3 に答える 3

2

For clarity, the working result is

double usagePanels = 20.0
double rate = 5.0
annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
       ((1 + rate / 100) - 1) /
       (Math.Pow(1+rate/100, (usagePanels))-1)) * 100;

Thanks to Jason Allen and Grhm who basically figured it out and gave great advice.

于 2012-11-19T16:58:41.537 に答える
2

試す:

double usagePanels = 20.0
double rate = 5.0
double annPanels = (Math.Pow((1 + rate / 100), usagePanels) *
         (rate / 100.0)) /
         Math.Pow(1+rate/100, usagePanels)-1)) * 100;

usagePanelsと の間の閉じ括弧が-1間違っています...

(これは、数式を Excel と C# で分解し、各部分を比較することでわかりました。)

編集: Excel と C# を比較するためのもう 1 つの便利なヒントは、Excel のセルに (名前付き範囲機能を使用して) 名前を付けることです。これにより、Excel の数式を変数名に近づけることができます...

于 2012-11-19T16:46:49.243 に答える
2

これでうまくいくはずです:

double rate = 5;
double years = 20;
double annunity = Math.Pow(1 + rate / 100, years) * (rate / 100) / Math.Pow(1 + rate / 100, years - 1) * 100;
于 2012-11-19T16:24:20.383 に答える