Making extra payments on your mortgage is a powerful strategy to reduce the total interest paid over the life of your loan and shorten the repayment period. This calculator helps you visualize the impact of adding a consistent extra amount to your monthly mortgage payment.
How it Works: The Math Behind the Savings
When you make a mortgage payment, it's typically applied first to the interest accrued since your last payment, and then to the principal balance. By paying more than your scheduled monthly payment, the additional amount goes directly towards reducing the principal. A lower principal balance means less interest accrues in subsequent periods, creating a snowball effect that accelerates your loan payoff and significantly cuts down on total interest costs.
The calculation involves simulating the loan amortization schedule with and without the extra payments. Here's a simplified breakdown:
Calculate Original Amortization: Determine the original monthly payment using the standard mortgage payment formula. Then, simulate the loan's amortization month by month to find the total interest paid and the loan term.
Calculate Amortization with Extra Payments: With the extra payment added, recalculate the amortization. Each month, the payment (original + extra) is applied. If the payment exceeds the interest due for that month, the remainder reduces the principal. This process continues until the principal reaches zero.
Compare and Quantify Savings: The difference in total interest paid between the two scenarios is your total interest saved. The difference in the number of months to pay off the loan is your time saved.
Key Inputs Explained:
Current Mortgage Balance: The outstanding principal amount you still owe on your mortgage.
Annual Interest Rate: The yearly interest rate on your mortgage, expressed as a percentage.
Remaining Loan Term (Months): The number of months left until your mortgage is fully paid off according to the original schedule.
Extra Monthly Payment: The additional amount you plan to pay each month on top of your regular mortgage payment.
Benefits of Making Extra Payments:
Save Money: Significantly reduce the total interest paid over the loan's lifetime.
Build Equity Faster: Increase your home equity more rapidly.
Become Mortgage-Free Sooner: Shorten the time it takes to own your home outright.
Financial Freedom: Eliminate a major debt obligation earlier, freeing up cash flow for other financial goals.
When to Consider Extra Payments:
When you receive a financial windfall (e.g., bonus, tax refund).
When your income increases.
As a disciplined savings strategy to reduce long-term debt.
Disclaimer: This calculator provides an estimate based on the inputs provided. Actual savings may vary due to factors like lender fees, changes in interest rates (if you have an adjustable-rate mortgage), or inconsistent extra payments. Always consult with your mortgage lender or a financial advisor for personalized advice.
function calculateExtraPayments() {
var loanAmount = parseFloat(document.getElementById("loanAmount").value);
var annualInterestRate = parseFloat(document.getElementById("annualInterestRate").value);
var remainingTermMonths = parseInt(document.getElementById("remainingTermMonths").value);
var extraPaymentAmount = parseFloat(document.getElementById("extraPaymentAmount").value);
// Input validation
if (isNaN(loanAmount) || loanAmount <= 0 ||
isNaN(annualInterestRate) || annualInterestRate < 0 ||
isNaN(remainingTermMonths) || remainingTermMonths <= 0 ||
isNaN(extraPaymentAmount) || extraPaymentAmount 0) {
originalMonthlyPayment = loanAmount * (monthlyInterestRate * Math.pow(1 + monthlyInterestRate, remainingTermMonths)) / (Math.pow(1 + monthlyInterestRate, remainingTermMonths) – 1);
} else {
originalMonthlyPayment = loanAmount / remainingTermMonths;
}
var totalInterestPaidOriginal = 0;
var currentBalance = loanAmount;
var monthsOriginal = 0;
var tempLoanAmountOriginal = loanAmount;
// Simulate original amortization
while (tempLoanAmountOriginal > 0) {
var interestPayment = tempLoanAmountOriginal * monthlyInterestRate;
var principalPayment = originalMonthlyPayment – interestPayment;
// Handle cases where original monthly payment might not cover interest (e.g., very low rate, long term)
if (principalPayment < 0) principalPayment = 0;
if (originalMonthlyPayment 0) {
// This scenario indicates the original payment is insufficient to cover interest,
// which is unusual for standard mortgages but possible in edge cases.
// For simplicity, we'll assume a standard mortgage where payment covers interest.
// If this were a real-world complex calculator, more robust handling would be needed.
// For this exercise, we'll break if payment is insufficient.
break;
}
totalInterestPaidOriginal += interestPayment;
tempLoanAmountOriginal -= principalPayment;
monthsOriginal++;
if (monthsOriginal > remainingTermMonths * 2) { // Safety break for potential infinite loops
console.error("Original amortization loop exceeded expected months.");
break;
}
}
// Adjust total interest if the last payment was smaller
if (tempLoanAmountOriginal 0) {
var lastInterest = (loanAmount – (originalMonthlyPayment * (monthsOriginal – 1))) * monthlyInterestRate;
totalInterestPaidOriginal = (originalMonthlyPayment * (monthsOriginal – 1)) – loanAmount + lastInterest;
}
var totalInterestPaidWithExtra = 0;
var currentBalanceWithExtra = loanAmount;
var monthsWithExtra = 0;
var totalPayment = originalMonthlyPayment + extraPaymentAmount;
// Simulate amortization with extra payments
while (currentBalanceWithExtra > 0) {
var interestPayment = currentBalanceWithExtra * monthlyInterestRate;
var principalPayment = totalPayment – interestPayment;
// Ensure principal payment is not negative and that total payment covers interest
if (principalPayment < 0) principalPayment = 0;
if (totalPayment 0) {
// If even the total payment isn't enough to cover interest, the loan will never be paid off.
// This is an edge case, but important to consider.
alert("Warning: Your total monthly payment (original + extra) is not enough to cover the interest. The loan may never be paid off.");
document.getElementById("totalInterestSaved").textContent = "N/A";
document.getElementById("timeSavedMonths").textContent = "N/A";
document.getElementById("newPayoffYears").textContent = "N/A";
return;
}
totalInterestPaidWithExtra += interestPayment;
currentBalanceWithExtra -= principalPayment;
monthsWithExtra++;
if (monthsWithExtra > remainingTermMonths * 2) { // Safety break
console.error("Extra payment amortization loop exceeded expected months.");
break;
}
}
// Adjust total interest if the last payment was smaller
if (currentBalanceWithExtra 0) {
var lastInterestWithExtra = (loanAmount – (totalPayment * (monthsWithExtra – 1))) * monthlyInterestRate;
totalInterestPaidWithExtra = (totalPayment * (monthsWithExtra – 1)) – loanAmount + lastInterestWithExtra;
}
var totalInterestSaved = totalInterestPaidOriginal – totalInterestPaidWithExtra;
var timeSavedMonths = monthsOriginal – monthsWithExtra;
// Ensure savings are not negative due to calculation nuances or edge cases
if (totalInterestSaved < 0) totalInterestSaved = 0;
if (timeSavedMonths < 0) timeSavedMonths = 0;
var newPayoffYears = Math.ceil(monthsWithExtra / 12);
document.getElementById("totalInterestSaved").textContent = "$" + totalInterestSaved.toFixed(2);
document.getElementById("timeSavedMonths").textContent = timeSavedMonths.toString();
document.getElementById("newPayoffYears").textContent = newPayoffYears.toString();
}