Calculate your potential monthly savings and determine your break-even point.
Current Monthly Payment (P&I):$0.00
New Monthly Payment (P&I):$0.00
Monthly Savings:$0.00
Break-Even Point:0 months
Total Interest Savings (Lifetime):$0.00
Understanding Mortgage Refinancing
Refinancing your mortgage involves replacing your current home loan with a new one, typically to secure a lower interest rate or change the loan term. While a lower monthly payment is the most common goal, it is essential to calculate the "break-even point"—the moment where your monthly savings finally outweigh the upfront closing costs of the new loan.
Key Factors in Refinancing
Interest Rate Differential: Generally, experts suggest refinancing is worth it if you can lower your rate by at least 0.75% to 1%.
Closing Costs: These typically range from 2% to 5% of the loan amount. You must stay in the home long enough to recoup these costs.
Loan Term: Switching from a 30-year to a 15-year mortgage can save massive amounts in interest, though your monthly payment may increase.
Real-World Example
Imagine you have a $300,000 balance at a 6.5% interest rate with 25 years remaining. Your current payment is roughly $2,025. By refinancing to a 4.5% rate on a new 30-year term, your payment drops to $1,520.
While you save $505 per month, if the closing costs are $5,000, it will take you 10 months to break even. After that 10th month, the $505 monthly savings is pure profit in your pocket.
How to Use This Calculator
To get an accurate result, enter your current principal balance and the interest rate you are currently paying. Then, enter the quoted rate and term for the new loan you are considering. Don't forget to include the closing costs (appraisal, origination fees, title insurance, etc.) provided by your lender to see your true break-even timeline.
function calculateRefiSavings() {
var balance = parseFloat(document.getElementById('refi_balance').value);
var oldRate = parseFloat(document.getElementById('refi_old_rate').value) / 100 / 12;
var newRate = parseFloat(document.getElementById('refi_new_rate').value) / 100 / 12;
var oldTermMonths = parseFloat(document.getElementById('refi_old_term').value) * 12;
var newTermMonths = parseFloat(document.getElementById('refi_new_term').value) * 12;
var closingCosts = parseFloat(document.getElementById('refi_closing_costs').value);
if (isNaN(balance) || isNaN(oldRate) || isNaN(newRate) || isNaN(oldTermMonths) || isNaN(newTermMonths) || isNaN(closingCosts)) {
alert("Please enter valid numeric values in all fields.");
return;
}
// Current Payment Calculation
var oldPayment = balance * (oldRate * Math.pow(1 + oldRate, oldTermMonths)) / (Math.pow(1 + oldRate, oldTermMonths) – 1);
// New Payment Calculation
var newPayment = balance * (newRate * Math.pow(1 + newRate, newTermMonths)) / (Math.pow(1 + newRate, newTermMonths) – 1);
var monthlySavings = oldPayment – newPayment;
// Lifetime Interest Logic
var totalOldInterest = (oldPayment * oldTermMonths) – balance;
var totalNewInterest = (newPayment * newTermMonths) – balance;
var lifetimeSavings = (oldPayment * oldTermMonths) – (newPayment * newTermMonths) – closingCosts;
// Break Even Calculation
var breakEvenMonths = 0;
if (monthlySavings > 0) {
breakEvenMonths = Math.ceil(closingCosts / monthlySavings);
}
// Display Results
document.getElementById('refi_results_box').style.display = 'block';
document.getElementById('res_old_payment').innerText = '$' + oldPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_new_payment').innerText = '$' + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_monthly_savings').innerText = '$' + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings <= 0) {
document.getElementById('res_break_even').innerText = "Never (New payment is higher)";
document.getElementById('res_break_even').style.color = "#dc3545";
} else {
document.getElementById('res_break_even').innerText = breakEvenMonths + " months";
document.getElementById('res_break_even').style.color = "#28a745";
}
document.getElementById('res_lifetime_savings').innerText = '$' + lifetimeSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (lifetimeSavings < 0) {
document.getElementById('res_lifetime_savings').style.color = "#dc3545";
} else {
document.getElementById('res_lifetime_savings').style.color = "#28a745";
}
}