Few days ago, I added a new App to my inventory on Windows Phone Marketplace. The Loan Calculator app was just something I needed when I was in a hunt for a car (still am). The thing is I wanted to keep it simple. Just input the numbers and see the total, how much, for how long, you know... just the FINAL number. Which is what car dealers will never give upfront, because they always play that 101 psychology thing on you.

So, I built this app using the common formula that you can see around in many websites. The idea is pretty simple, just input the data and get the total final price and the monthly installments. As an extra, you can also see how the amortization for the loan plays along time.

Check it out, assume we want to calculate the final price for a car that cost 25k, we will put a 10% down payment, 2.5k, with an APR of 3.0%, and with a loan term of 3 years. Just enter the data and hit "Calculate".

Then, we just get the summary result with the final cost, see that in total, we are paying $26,055.78 for the car. And I don't know you, but that's what I really care. The monthly installments are of $654.33, you can also see that in total, you will pay $1,055.78 of interest on the car.

On the details tab, we get the amortization for the monthly payments. So you can see how much goes to interest and how much to the principal.

The formula is this one:

The only catch is that the "rate" is our APR divided by 1200, so here is the C# code to get the monthly installments based on the formula above.

var rate = interest/1200;
var monthly = rate > 0 ?
((rate + rate / (Math.Pow(1 + rate, months) - 1)) * principal) : principal / months

Now, we have to pay interest every month, and it is based on what we still owe, so applying that to the monthly installments, we can get the amortization for every month. The C# code is as follows:

public void MonthlyDetails(double carPrice, double interest,
double downPayment, int months, double monthly)
{
var endingBalance = carPrice - downPayment;
var rate = interest/1200.0;
var count = 1;
while (count <= months)
{
var interestPaid = endingBalance*rate;
var principlePaid = monthly - interestPaid;
endingBalance -= principlePaid;
CreateRow(count, String.Format("{0:C}",
interestPaid), String.Format("{0:C}",
principlePaid),String.Format("{0:C}", endingBalance), count++);
}
}

Where "`CreateRow`

" is a method that adds the data to the grid on the screen.

Hope you like it!