Subscribe to Updates

RSS RSS feed    What is this?

Email By email:

Privacy Assured more »

Topics

Search This Site

Follow on Facebook

 

« Building a Future-Proof Website That Also Works With Older Browsers | Main | Review of Ryan Deiss's 43 Split Tests v2.0 »
Friday
Sep102010

JavaScript Function for Calculating Annual Percentage Rate (APR Formula)

Usually, whenever I need one of these helper-type functions, a quick Google Search usually turns up exactly what I need. However, when I needed a JavaScript function to calculate the Annual Percentage Rate (APR) on a home loan, it was nowhere to be found!

In this post is the function I wrote to calculate APR based on some formulas I did find. One of my requirements was that this formula needed to produce exactly the same result as the Excel RATE function that I frequently encountered while trying to find an APR function.

This function was designed for fixed monthly payments. It will not work for variable rate loans.

The JavaScript Annual Percentage Rate (APR) Function

<script type="text/javascript">
function calculateAPR(loanamount, numpayments, baseannualrate, costs){
	/* 
	By Paul Cormier - Sep 10, 2010 - http://webmasterymadesimple.com
	loanamount 	= the amount borrowed
	numpayments	= number of monthly payments e.g. 30 years = 360
	baserate	= the base percentage rate of the loan. A 5.25% Annual Rate should be passed in as 0.0525 NOT 5.25
	costs		= the loan closing costs e.g. origination fee, broker fees, etc.
	*/
	var rate = 	baseannualrate / 12;
	var totalmonthlypayment = ((loanamount+costs) * rate * Math.pow(1+rate,numpayments)) / (Math.pow(1+rate, numpayments)-1);
	var testrate = rate;
	var iteration = 1;
	var testresult = 0;
	//iterate until result = 0
	var testdiff = testrate;
	while (iteration <= 100) {
		testresult = ((testrate * Math.pow(1 + testrate, numpayments)) / (Math.pow(1 + testrate, numpayments) - 1)) - (totalmonthlypayment / loanamount);
		if (Math.abs(testresult) < 0.0000001) break;
		if (testresult < 0) testrate += testdiff;
		else testrate -= testdiff;
		testdiff = testdiff / 2;
		iteration++;
	}
	testrate = testrate * 12;
	return testrate.toFixed(6);
}
</script>

NOTE: I assume no liability or responsibility for the accuracy or results produced by this function. It is up to you to test and verify that it returns the desired results. You are free to do whatever you wish with the function.

If you found this function to be useful and saved you some time and effort, feel free to donate to my beer fund using the PayPal link below.

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>