Deciding to refinance your home is a major financial move. To determine if it's worth it, our calculator focuses on the "Break-Even Point." This is the moment when the amount you save on your monthly payments finally offsets the upfront closing costs of the new loan.
Key Terms to Know
Loan Balance: The remaining principal amount you owe on your current mortgage.
Interest Rate: The annual percentage rate for your new loan. Even a 0.5% difference can save thousands over time.
Closing Costs: These typically range from 2% to 5% of the loan amount and include appraisal fees, origination fees, and title insurance.
P&I: This stands for Principal and Interest. Our calculator focuses on these core costs, excluding taxes and insurance, which usually remain similar regardless of your lender.
Example Calculation
Imagine you have a $300,000 balance. Your current payment is $2,100. You refinance into a 30-year loan at 6% interest with $6,000 in closing costs.
Your new payment would be approximately $1,798. This creates a monthly saving of $302. By dividing your $6,000 closing costs by the $302 savings, you find that your break-even point is 19.8 months. If you plan to stay in the home longer than 20 months, refinancing is likely a smart financial decision.
function calculateRefi() {
var balance = parseFloat(document.getElementById("loanBalance").value);
var currentPay = parseFloat(document.getElementById("currentPayment").value);
var rate = parseFloat(document.getElementById("newRate").value);
var termYears = parseFloat(document.getElementById("newTerm").value);
var costs = parseFloat(document.getElementById("closingCosts").value);
if (isNaN(balance) || isNaN(currentPay) || isNaN(rate) || isNaN(termYears) || isNaN(costs)) {
alert("Please enter valid numbers in all fields.");
return;
}
var monthlyRate = (rate / 100) / 12;
var totalMonths = termYears * 12;
// Monthly Payment Formula: P * [r(1+r)^n] / [(1+r)^n – 1]
var x = Math.pow(1 + monthlyRate, totalMonths);
var newMonthly = (balance * x * monthlyRate) / (x – 1);
var monthlySavings = currentPay – newMonthly;
var breakEven = costs / monthlySavings;
var totalInterest = (newMonthly * totalMonths) – balance;
document.getElementById("results").style.display = "block";
document.getElementById("newMonthlyPaymentText").innerText = "$" + newMonthly.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings > 0) {
document.getElementById("monthlySavingsText").innerText = "$" + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("monthlySavingsText").style.color = "#38a169";
document.getElementById("breakEvenText").innerText = Math.ceil(breakEven) + " months";
} else {
document.getElementById("monthlySavingsText").innerText = "No Savings (New payment is higher)";
document.getElementById("monthlySavingsText").style.color = "#e53e3e";
document.getElementById("breakEvenText").innerText = "Never";
}
document.getElementById("totalInterestText").innerText = "$" + totalInterest.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}