Discount points are a way to potentially lower your mortgage's interest rate over its lifetime. One discount point typically costs 1% of the loan amount. In exchange for paying this upfront fee, you can negotiate a lower interest rate with your lender. This calculator helps you analyze the financial implications of purchasing discount points.
How Discount Points Work
When you buy a discount point, you are essentially prepaying a portion of the interest on your loan. The lender uses this prepayment to reduce the interest rate they charge you. The exact reduction in interest rate varies by lender and market conditions, but a common convention is that one point might reduce the rate by 0.25%.
Key Concepts:
Loan Amount: The total amount of money you are borrowing for your mortgage.
Original Interest Rate: The interest rate on the mortgage before purchasing any discount points.
Number of Discount Points: The quantity of discount points you choose to buy. Each point usually represents 1% of the loan amount in cost.
Cost Per Point: The dollar amount you pay for each discount point. This is typically 1% of the loan amount but can be negotiated.
New Interest Rate: The reduced interest rate on your mortgage after purchasing discount points.
The Math Behind the Savings
This calculator determines the total upfront cost of the discount points and then estimates your monthly savings based on the reduction in interest rate. It also calculates the Break-Even Point, which is the number of months it will take for your monthly savings to recoup the initial cost of purchasing the points.
The calculations involve:
Total Cost of Points:Number of Discount Points * Cost Per Point
Monthly Payment (Original Rate): Calculated using the standard mortgage payment formula (amortization).
Monthly Payment (New Rate): Calculated using the mortgage payment formula with the reduced interest rate.
Monthly Savings:Monthly Payment (Original Rate) - Monthly Payment (New Rate)
Break-Even Point (Months):Total Cost of Points / Monthly Savings
When to Consider Discount Points:
Purchasing discount points makes sense if:
You plan to stay in your home for a long time, allowing ample time for the monthly savings to offset the upfront cost.
You can afford the upfront cost of the points.
The reduction in interest rate is significant enough to offer substantial monthly savings and a reasonable break-even period.
Always compare the total cost and long-term savings with other loan options. Consult with a mortgage professional to determine the best strategy for your financial situation.
function calculateMortgagePayment(principal, annualRate, years) {
var monthlyRate = annualRate / 100 / 12;
var numberOfMonths = years * 12;
var payment = principal * (monthlyRate * Math.pow(1 + monthlyRate, numberOfMonths)) / (Math.pow(1 + monthlyRate, numberOfMonths) – 1);
return isNaN(payment) ? 0 : payment;
}
function calculateDiscountPoints() {
var loanAmount = parseFloat(document.getElementById("loanAmount").value);
var originalInterestRate = parseFloat(document.getElementById("originalInterestRate").value);
var pointsPurchased = parseInt(document.getElementById("pointsPurchased").value);
var costPerPoint = parseFloat(document.getElementById("costPerPoint").value);
var newInterestRate = parseFloat(document.getElementById("newInterestRate").value);
var resultDiv = document.getElementById("result-value");
var detailsDiv = document.getElementById("result-details");
resultDiv.textContent = "";
detailsDiv.innerHTML = "";
if (isNaN(loanAmount) || loanAmount <= 0 ||
isNaN(originalInterestRate) || originalInterestRate <= 0 ||
isNaN(pointsPurchased) || pointsPurchased < 0 ||
isNaN(costPerPoint) || costPerPoint < 0 ||
isNaN(newInterestRate) || newInterestRate < 0) {
detailsDiv.innerHTML = "Please enter valid numbers for all fields.";
return;
}
if (newInterestRate >= originalInterestRate) {
detailsDiv.innerHTML = "The new interest rate must be lower than the original rate to see savings.";
return;
}
var totalCostOfPoints = pointsPurchased * costPerPoint;
// Assuming a standard mortgage term of 30 years for payment calculation
var mortgageTermYears = 30;
var monthlyPaymentOriginal = calculateMortgagePayment(loanAmount, originalInterestRate, mortgageTermYears);
var monthlyPaymentNew = calculateMortgagePayment(loanAmount, newInterestRate, mortgageTermYears);
var monthlySavings = monthlyPaymentOriginal – monthlyPaymentNew;
var breakEvenMonths = (monthlySavings > 0) ? totalCostOfPoints / monthlySavings : Infinity;
resultDiv.textContent = "$" + monthlySavings.toFixed(2) + " / month";
detailsDiv.innerHTML = `
Total Cost of Points: $${totalCostOfPoints.toFixed(2)}
Original Monthly Payment (approx.): $${monthlyPaymentOriginal.toFixed(2)}
New Monthly Payment (approx.): $${monthlyPaymentNew.toFixed(2)}
Break-Even Point: ${isFinite(breakEvenMonths) ? breakEvenMonths.toFixed(1) + ' months' : 'N/A (no savings)'}
(Based on a ${mortgageTermYears}-year loan term)
`;
}