Determine if refinancing your home loan will save you money over the long term.
Current Monthly Payment (P&I):$0.00
New Monthly Payment (P&I):$0.00
Monthly Savings:$0.00
Total Interest Savings Over Life of Loan:$0.00
Break-Even Point (Months):0 Months
How to Calculate Mortgage Refinance Savings
Refinancing a mortgage involves replacing your existing home loan with a new one, typically to take advantage of lower interest rates or to change the loan term. To find your true savings, you must look beyond just the monthly payment.
1. The Monthly Payment Formula
The calculation for a fixed-rate mortgage payment is: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]. Where P is the principal, i is the monthly interest rate, and n is the number of months. By lowering "i", your monthly obligation drops, freeing up cash flow.
2. Calculating Total Interest Savings
Total savings is the difference between the remaining interest on your current loan and the total interest you will pay on the new loan, minus the closing costs. If you extend a 20-year remaining term back to a 30-year term, you might save money monthly but pay more in total interest over time.
3. Finding the Break-Even Point
This is the most critical metric. To find the break-even point, divide the Total Closing Costs by your Monthly Savings. For example, if it costs $6,000 to refinance and you save $200 per month, your break-even point is 30 months. If you plan to sell the house before 30 months, the refinance may actually lose you money.
Realistic Refinance Example
Current Scenario: $300,000 balance at 6.5% with 25 years left. Payment: $2,025.
New Scenario: $300,000 balance at 5.25% for 30 years. Payment: $1,656.
Upfront Costs: $5,000.
Results: Monthly savings of $369. Break-even in 13.5 months.
function calculateRefi() {
var currentBalance = parseFloat(document.getElementById("currentBalance").value);
var currentRate = parseFloat(document.getElementById("currentRate").value) / 100 / 12;
var remainingYears = parseFloat(document.getElementById("remainingYears").value);
var newRate = parseFloat(document.getElementById("newRate").value) / 100 / 12;
var newTerm = parseFloat(document.getElementById("newTerm").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
if (isNaN(currentBalance) || isNaN(currentRate) || isNaN(remainingYears) || isNaN(newRate) || isNaN(newTerm) || isNaN(closingCosts)) {
alert("Please enter valid numbers in all fields.");
return;
}
// Old Payment Calculation
var oldMonths = remainingYears * 12;
var oldPayment = currentBalance * (currentRate * Math.pow(1 + currentRate, oldMonths)) / (Math.pow(1 + currentRate, oldMonths) – 1);
var totalOldCost = oldPayment * oldMonths;
// New Payment Calculation
var newMonths = newTerm * 12;
var newPayment = currentBalance * (newRate * Math.pow(1 + newRate, newMonths)) / (Math.pow(1 + newRate, newMonths) – 1);
var totalNewCost = (newPayment * newMonths) + closingCosts;
// Savings
var monthlySavings = oldPayment – newPayment;
var totalSavings = totalOldCost – totalNewCost;
var breakEven = closingCosts / monthlySavings;
// Display Results
document.getElementById("results").style.display = "block";
document.getElementById("oldPaymentDisplay").innerText = "$" + oldPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("newPaymentDisplay").innerText = "$" + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("monthlySavingsDisplay").innerText = "$" + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (totalSavings > 0) {
document.getElementById("totalInterestSavingsDisplay").innerText = "$" + totalSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalInterestSavingsDisplay").style.color = "#28a745";
} else {
document.getElementById("totalInterestSavingsDisplay").innerText = "-$" + Math.abs(totalSavings).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " (Loss)";
document.getElementById("totalInterestSavingsDisplay").style.color = "#dc3545";
}
if (monthlySavings > 0) {
document.getElementById("breakEvenDisplay").innerText = Math.ceil(breakEven) + " Months";
} else {
document.getElementById("breakEvenDisplay").innerText = "Never (No monthly savings)";
}
window.scrollTo({
top: document.getElementById("results").offsetTop – 50,
behavior: 'smooth'
});
}