JavaScript
Article

JavaScript Interest Loan Calculator Algorithm

By Sam Deering

It using a calculation of % interest which using logarithms to calculate the principle payment/total interest and how long it will take to pay off the loan given a borrow amount and a monthly payment amount

//FORMULA FOR CALUCLATING INTEREST RATE
//p = x*(1 - (1+r)^-n)/r

var interest = 15, rate = interest/100, principal = 1000, payment = 100, noofpay = 12;

var nper1 = Math.log((1-((principal/payment) * (rate/noofpay))));
var nper2 = Math.log((1+(rate/noofpay)));
nper = -(nper1/nper2);
interestpaid=payment*nper-principal;
nper = -Math.round((nper1/nper2));
nyear=Math.floor(nper/12);
nmonth=nper%12;
if (nper>0)
{
    if (nmonth==0)
    {
        period=nyear+" Year(s)";
    }
    else
    {
        period=nyear+" Year(s) and "+nmonth+" Month(s)";
    }
}
else
{
    period="Invalid Values";
    interestpaid=0;
}

console.log("Montly Payments: " + period + ", Total Interest Paid: " + interestpaid.toFixed(2));

Into a function with parameters passed in:

//the price calculation formula
//@return the price and length of time
function calculate(interest, principal, payment)
{
    //get data
    var calcElem = $('#calc');

    //FORMULA FOR CALUCLATING INTEREST RATE
    //p = x*(1 - (1+r)^-n)/r

    var rate = interest/100, noofpay = 12;

    var nper1 = Math.log((1-((principal/payment) * (rate/noofpay))));
    var nper2 = Math.log((1+(rate/noofpay)));
    nper = -(nper1/nper2);
    interestpaid=payment*nper-principal;
    nper = -Math.round((nper1/nper2));
    nyear=Math.floor(nper/12);
    nmonth=nper%12;
    if (nper>0)
    {
        if (nmonth==0)
        {
            period=nyear+" Year(s)";
        }
        else
        {
            period=nyear+" Year(s) and "+nmonth+" Month(s)";
        }
    }
    else
    {
        period="Invalid Values";
        interestpaid=0;
    }

    //console.log("Montly Payments: " + period + ", Total Interest Paid: " + interestpaid.toFixed(2));

    var priceData = {
        price : '$'+this.formatCurrency(interestpaid+owe),
        interest : '$'+this.formatCurrency(interestpaid),
        time  : period
    }
    return priceData;
}
Sam Deering
Meet the author
Sam Deering is a Front-end Web Developer who specialises in JavaScript & jQuery. Sam is driven and passionate about sharing his knowledge to educate others.

Recommended

Learn Coding Online
Learn Web Development

Start learning web development and design for free with SitePoint Premium!

Get the latest in JavaScript, once a week, for free.