Calculate your potential monthly savings and see how long it takes to break even on closing costs.
Results Summary
Current Monthly Payment (P&I):
New Monthly Payment (P&I):
Monthly Savings:
Break-Even Period:
Total Lifetime Interest Savings:
Should You Refinance Your Mortgage?
Deciding to refinance your home is a major financial move. Most experts suggest that a drop of at least 0.75% to 1% in interest rates makes a refinance worth considering. However, it's not just about the rateāit's about the "break-even point." This is the number of months it takes for your monthly savings to cover the upfront closing costs of the new loan.
Understanding the Math
For example, if you owe $300,000 at a 6.5% rate, your monthly Principal and Interest (P&I) is approximately $1,896. If you refinance into a new 30-year loan at 4.5%, your new payment drops to $1,520.
Your monthly savings would be $376. If your closing costs are $5,000, you divide $5,000 by $376 to get a break-even point of 13.3 months. If you plan to stay in the home longer than 14 months, the refinance pays for itself.
Key Factors to Consider
Closing Costs: Usually range from 2% to 5% of the loan amount.
Loan Term: If you refinance a loan you've been paying for 10 years back into a new 30-year term, you might lower your monthly payment but pay more interest over the long run.
Private Mortgage Insurance (PMI): If your home value has increased, a refinance could help you eliminate PMI if your equity has reached 20%.
function calculateRefinance() {
var balance = parseFloat(document.getElementById('currentBalance').value);
var currentRate = parseFloat(document.getElementById('currentRate').value) / 100 / 12;
var newRate = parseFloat(document.getElementById('newRate').value) / 100 / 12;
var newTermMonths = parseFloat(document.getElementById('newTerm').value) * 12;
var remainingMonths = parseFloat(document.getElementById('remainingYears').value) * 12;
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
if (isNaN(balance) || isNaN(currentRate) || isNaN(newRate) || isNaN(newTermMonths)) {
alert("Please enter valid numbers in all fields.");
return;
}
// Current Payment Calculation (P&I)
var currentPayment = balance * (currentRate * Math.pow(1 + currentRate, remainingMonths)) / (Math.pow(1 + currentRate, remainingMonths) – 1);
// New Payment Calculation (P&I)
var newPayment = balance * (newRate * Math.pow(1 + newRate, newTermMonths)) / (Math.pow(1 + newRate, newTermMonths) – 1);
var monthlySavings = currentPayment – newPayment;
// Break-even Point
var breakEvenMonths = closingCosts / monthlySavings;
// Total Savings (Interest comparison)
var totalCurrentRemaining = currentPayment * remainingMonths;
var totalNewCost = (newPayment * newTermMonths) + closingCosts;
var lifetimeSavings = totalCurrentRemaining – totalNewCost;
// Display Results
document.getElementById('resCurrentPay').innerText = "$" + currentPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNewPay').innerText = "$" + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMonthlySavings').innerText = "$" + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings > 0) {
document.getElementById('resBreakEven').innerText = breakEvenMonths.toFixed(1) + " Months";
} else {
document.getElementById('resBreakEven').innerText = "Never (New payment is higher)";
}
document.getElementById('resTotalSavings').innerText = "$" + lifetimeSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('refiResult').style.display = 'block';
}