An amortization schedule is a table detailing the periodic payments on a loan. Each payment consists of both principal and interest. As payments are made, the principal balance decreases, and the portion of the payment allocated to interest also decreases over time, while the principal portion increases.
function calculateAmortization() {
var loanAmount = parseFloat(document.getElementById("loanAmount").value);
var annualInterestRate = parseFloat(document.getElementById("annualInterestRate").value);
var loanTermYears = parseFloat(document.getElementById("loanTermYears").value);
var resultDiv = document.getElementById("amortizationResult");
var scheduleTableDiv = document.getElementById("scheduleTable");
resultDiv.innerHTML = "";
scheduleTableDiv.innerHTML = "";
if (isNaN(loanAmount) || isNaN(annualInterestRate) || isNaN(loanTermYears) || loanAmount <= 0 || annualInterestRate < 0 || loanTermYears <= 0) {
resultDiv.innerHTML = "Please enter valid positive numbers for all fields.";
return;
}
var monthlyInterestRate = annualInterestRate / 12 / 100;
var numberOfPayments = loanTermYears * 12;
var monthlyPayment = (loanAmount * monthlyInterestRate) / (1 – Math.pow(1 + monthlyInterestRate, -numberOfPayments));
if (isNaN(monthlyPayment) || !isFinite(monthlyPayment)) {
resultDiv.innerHTML = "Could not calculate monthly payment. Please check your inputs.";
return;
}
var totalPayment = monthlyPayment * numberOfPayments;
var totalInterestPaid = totalPayment – loanAmount;
resultDiv.innerHTML = "
" +
"" +
"";
var beginningBalance = loanAmount;
var currentDate = new Date(); // Start with current date for simplicity
for (var i = 0; i < numberOfPayments; i++) {
var interestPayment = beginningBalance * monthlyInterestRate;
var principalPayment = monthlyPayment – interestPayment;
var endingBalance = beginningBalance – principalPayment;
// Adjust last payment to ensure ending balance is exactly 0
if (i === numberOfPayments – 1) {
principalPayment = beginningBalance;
interestPayment = monthlyPayment – principalPayment;
endingBalance = 0;
}
// Basic date formatting (you might want a more robust date library for production)
var paymentDate = new Date(currentDate);
paymentDate.setMonth(currentDate.getMonth() + i);
var formattedDate = (paymentDate.getMonth() + 1) + "/" + paymentDate.getDate() + "/" + paymentDate.getFullYear();
tableHTML += "