theserpent
theserpent

Reputation: 68

Translating Excel formula to c# (annuity)

I have a excel formula I am trying to "translate" into c# code.

It is used to calculate an "annuity rate" over time (for example 20 years).

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

D28 = 20 (years)

E26 = 5,00 (the rate in percent)

the ^ stands for exponent in Excel

As a result with these numbers I expect 8,02% per annum.

I tried several approaches using Math.Pow but wasn't successful.

Here is my first approach which gives me a result of 5 somehow.

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;

Thank you.

Upvotes: 2

Views: 1045

Answers (3)

theserpent
theserpent

Reputation: 68

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.

Upvotes: 2

Grhm
Grhm

Reputation: 6844

Try:

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;

You've got the closing bracket, between usagePanels and the -1, wrong...

(I found this by breaking the formula apart in Excel and in C# and comparing each part.)

EDIT: Another handy tip for comparing Excel to C# is to give the cells in Excel a name (via the Named Range feature) that way the Excel formula can be made to look closer to variable names...

Upvotes: 2

Jason Allen
Jason Allen

Reputation: 813

This should do the trick:

double rate = 5;
double years = 20;
double annunity = Math.Pow(1 + rate / 100, years) * (rate / 100) / Math.Pow(1 + rate / 100, years - 1) * 100;

Upvotes: 2

Related Questions