Determine if refinancing your home loan will save you money and find your break-even point.
Current Monthly Payment:$0.00
New Monthly Payment:$0.00
Monthly Savings:$0.00
Total Interest Saved:$0.00
Break-Even Point:0 Months
Is Refinancing Your Mortgage Worth It?
Refinancing a mortgage involves replacing your existing home loan with a new one, typically to secure a lower interest rate, change the loan term, or tap into home equity. While a lower rate is attractive, it is crucial to account for closing costs and the "break-even point"—the moment your monthly savings surpass the upfront costs of the refinance.
Understanding the Break-Even Point
The break-even point is the most critical metric in this calculator. If your closing costs are $5,000 and your new mortgage saves you $200 per month, it will take 25 months to recover your investment. If you plan to sell the home in two years, refinancing would actually result in a net loss despite the lower monthly payment.
Key Factors to Consider
Interest Rate Differential: Traditionally, experts suggest refinancing if you can lower your rate by at least 0.75% to 1%.
Loan Term: If you refinance a 30-year loan you've had for 5 years into a new 30-year loan, you are extending your debt. This may lower payments but increase total interest paid over time.
Closing Costs: These typically range from 2% to 5% of the loan amount and include appraisal fees, title insurance, and origination fees.
Real-Life Example
Suppose you owe $300,000 at 6.5% with 25 years left. Your payment is roughly $2,025. By refinancing to a 5.5% rate on a new 30-year term, your payment drops to $1,703. You save $322 monthly. If closing costs are $5,000, your break-even point is approximately 15.5 months. If you stay in the home longer than 16 months, you win.
function calculateRefinance() {
var balance = 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(balance) || isNaN(currentRate) || isNaN(newRate) || isNaN(closingCosts)) {
alert("Please enter valid numeric values for all fields.");
return;
}
var currentMonths = remainingYears * 12;
var newMonths = newTerm * 12;
// Monthly Payment Formula: P * (r * (1 + r)^n) / ((1 + r)^n – 1)
var currentPayment = balance * (currentRate * Math.pow(1 + currentRate, currentMonths)) / (Math.pow(1 + currentRate, currentMonths) – 1);
var newPayment = balance * (newRate * Math.pow(1 + newRate, newMonths)) / (Math.pow(1 + newRate, newMonths) – 1);
var monthlySavings = currentPayment – newPayment;
// Total interest calculation
var totalCurrentInterest = (currentPayment * currentMonths) – balance;
var totalNewInterest = (newPayment * newMonths) – balance;
var interestSaved = totalCurrentInterest – totalNewInterest;
// Break-even months
var breakEvenMonths = monthlySavings > 0 ? (closingCosts / monthlySavings) : 0;
// Display Results
document.getElementById('results').style.display = 'block';
document.getElementById('currentMonthly').innerText = '$' + currentPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('newMonthly').innerText = '$' + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
var savingsEl = document.getElementById('monthlySavings');
savingsEl.innerText = '$' + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
savingsEl.className = monthlySavings >= 0 ? 'result-value savings-positive' : 'result-value savings-negative';
document.getElementById('totalInterestSaved').innerText = '$' + interestSaved.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings <= 0) {
document.getElementById('breakEven').innerText = "Never (No monthly savings)";
} else {
document.getElementById('breakEven').innerText = Math.ceil(breakEvenMonths) + " Months";
}
}