Determine if refinancing your home loan will actually save you money.
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 (Over New Term):$0.00
How to Use the Mortgage Refinance Calculator
Refinancing a mortgage involves replacing your current home loan with a new one, typically to secure a lower interest rate or change the loan term. To use this calculator, you will need your current outstanding balance, your current interest rate, and a quote for a new interest rate including the estimated closing costs.
Is Refinancing Worth It?
A common rule of thumb is that refinancing is worth it if you can reduce your interest rate by at least 0.75% to 1%. However, the real answer depends on your Break-Even Point. This is the amount of time it takes for your monthly savings to cover the upfront closing costs of the new loan.
Example Calculation
Imagine you have a $300,000 balance at 6.5% interest with 25 years remaining. Your current payment is roughly $2,025. If you refinance into a new 30-year loan at 5.0%, your new payment drops to $1,610. That is a monthly saving of $415. If the closing costs are $5,000, you will break even in approximately 12 months ($5,000 / $415). If you plan to stay in the home longer than a year, this refinance makes financial sense.
Key Factors to Consider
Closing Costs: These usually range from 2% to 5% of the loan amount.
Loan Term: Refinancing into a longer term (e.g., from 20 years remaining back to 30 years) lowers your payment but might increase the total interest paid over the life of the loan.
Equity: Most lenders require at least 20% equity to avoid Private Mortgage Insurance (PMI) on the new loan.
function calculateRefi() {
var balance = parseFloat(document.getElementById('refi_balance').value);
var costs = parseFloat(document.getElementById('refi_costs').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;
if (isNaN(balance) || isNaN(oldRate) || isNaN(newRate) || isNaN(oldTermMonths) || isNaN(newTermMonths)) {
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;
// Break even logic
var breakEvenMonths = 0;
if (monthlySavings > 0) {
breakEvenMonths = costs / monthlySavings;
}
// Total Savings logic (Current interest remaining vs New interest over life)
// Simplified as (Monthly Savings * New Term) – Closing Costs
var totalSavings = (monthlySavings * newTermMonths) – costs;
// Display results
document.getElementById('refi_results_area').style.display = 'block';
document.getElementById('res_old_pay').innerText = '$' + oldPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_new_pay').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_breakeven').innerText = "Never (No monthly savings)";
document.getElementById('res_total_savings').innerText = "N/A";
} else {
document.getElementById('res_breakeven').innerText = Math.ceil(breakEvenMonths) + " months (" + (breakEvenMonths / 12).toFixed(1) + " years)";
document.getElementById('res_total_savings').innerText = '$' + totalSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
}