Mortgage Affordability Calculator
Understanding how much you can afford for a mortgage is a crucial first step in the home-buying process. This calculator helps you estimate your maximum affordable mortgage payment based on your income, debts, and estimated interest rate.
function calculateMortgageAffordability() {
var annualIncome = parseFloat(document.getElementById("annualIncome").value);
var monthlyDebtPayments = parseFloat(document.getElementById("monthlyDebtPayments").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var loanTermYears = parseInt(document.getElementById("loanTermYears").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var propertyTaxesAnnual = parseFloat(document.getElementById("propertyTaxesAnnual").value);
var homeInsuranceAnnual = parseFloat(document.getElementById("homeInsuranceAnnual").value);
var pmiPercentage = parseFloat(document.getElementById("pmiPercentage").value);
var resultElement = document.getElementById("result");
resultElement.innerHTML = ""; // Clear previous results
// Input validation
if (isNaN(annualIncome) || annualIncome <= 0 ||
isNaN(monthlyDebtPayments) || monthlyDebtPayments < 0 ||
isNaN(downPayment) || downPayment < 0 ||
isNaN(loanTermYears) || loanTermYears <= 0 ||
isNaN(interestRate) || interestRate < 0 ||
isNaN(propertyTaxesAnnual) || propertyTaxesAnnual < 0 ||
isNaN(homeInsuranceAnnual) || homeInsuranceAnnual < 0 ||
isNaN(pmiPercentage) || pmiPercentage < 0) {
resultElement.innerHTML = "Please enter valid positive numbers for all fields.";
return;
}
// Lender typically allows DTI ratio up to 43%
var maxAllowedMonthlyPayment = (annualIncome * 0.43) / 12;
var availableForMortgage = maxAllowedMonthlyPayment – monthlyDebtPayments;
if (availableForMortgage <= 0) {
resultElement.innerHTML = "Based on your income and existing debts, your estimated affordable monthly mortgage payment is $0.00 or less. Consider reducing debt or increasing income.";
return;
}
var monthlyInterestRate = (interestRate / 100) / 12;
var loanTermMonths = loanTermYears * 12;
// Calculate estimated monthly P&I payment
// M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
// We need to work backwards to find P (loan amount)
// P = M * [ (1 + i)^n – 1] / [ i(1 + i)^n ]
// Function to calculate Principal based on desired monthly payment
function calculatePrincipal(monthlyPayment, monthlyRate, numMonths) {
if (monthlyRate === 0) return monthlyPayment * numMonths; // Special case for 0% interest
var numerator = Math.pow(1 + monthlyRate, numMonths) – 1;
var denominator = monthlyRate * Math.pow(1 + monthlyRate, numMonths);
return monthlyPayment * (numerator / denominator);
}
// Estimate other monthly costs
var monthlyPropertyTaxes = propertyTaxesAnnual / 12;
var monthlyHomeInsurance = homeInsuranceAnnual / 12;
var monthlyPMI = (pmiPercentage / 100) * downPayment; // This is a rough estimate, PMI is usually on the loan amount, but for affordability, using down payment as a proxy for total house cost can be a starting point if loan amount isn't determined yet. A more accurate PMI calc would require knowing the LTV.
// We'll use an iterative approach or a simplified assumption for now.
// A common approach is to calculate the maximum P&I that fits within the available budget
// after accounting for taxes, insurance, and PMI.
var totalMonthlyExcludingPI = monthlyPropertyTaxes + monthlyHomeInsurance + monthlyPMI;
var affordableMonthlyPI = availableForMortgage – totalMonthlyExcludingPI;
if (affordableMonthlyPI <= 0) {
resultElement.innerHTML = "Your estimated affordable monthly payment for Principal & Interest (P&I) is $0.00 or less after accounting for taxes, insurance, and PMI. You may need to reduce housing expenses or increase income.";
return;
}
var estimatedLoanAmount = calculatePrincipal(affordableMonthlyPI, monthlyInterestRate, loanTermMonths);
var estimatedMaxHomePrice = estimatedLoanAmount + downPayment;
// Format results
var formattedMaxHomePrice = estimatedMaxHomePrice.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedAffordableMonthlyPI = affordableMonthlyPI.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedMonthlyPropertyTaxes = monthlyPropertyTaxes.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedMonthlyHomeInsurance = monthlyHomeInsurance.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedMonthlyPMI = monthlyPMI.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedMonthlyDebtPayments = monthlyDebtPayments.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
var formattedAnnualIncome = annualIncome.toLocaleString(undefined, { style: 'currency', currency: 'USD' });
resultElement.innerHTML = `
Your Estimated Mortgage Affordability:
Estimated Maximum Home Price You Can Afford: ${formattedMaxHomePrice}
Estimated Maximum Monthly Principal & Interest (P&I) Payment: ${formattedAffordableMonthlyPI}
Breakdown of Estimated Monthly Housing Costs:
- P&I Payment: ${formattedAffordableMonthlyPI}
- Property Taxes: ${formattedMonthlyPropertyTaxes}
- Homeowners Insurance: ${formattedMonthlyHomeInsurance}
- PMI (if applicable): ${formattedMonthlyPMI}
- Total Estimated Monthly Housing Payment: ${availableForMortgage.toLocaleString(undefined, { style: 'currency', currency: 'USD' })}
Total Monthly Debt Payments (excl. mortgage): ${formattedMonthlyDebtPayments}
Annual Gross Income: ${formattedAnnualIncome}
This is an estimation. Actual affordability may vary based on lender requirements, credit score, specific loan programs, and other factors.
`;
}
.calculator-container {
font-family: Arial, sans-serif;
max-width: 600px;
margin: 20px auto;
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
background-color: #f9f9f9;
}
.calculator-container h2 {
text-align: center;
color: #333;
margin-bottom: 20px;
}
.calculator-container p {
color: #555;
line-height: 1.6;
margin-bottom: 15px;
}
.calculator-form .form-group {
margin-bottom: 15px;
display: flex;
flex-direction: column;
}
.calculator-form label {
display: block;
margin-bottom: 5px;
font-weight: bold;
color: #444;
}
.calculator-form input[type="number"],
.calculator-form input[type="text"] {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box; /* Include padding and border in the element's total width and height */
}
.calculator-form button {
width: 100%;
padding: 12px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
.calculator-form button:hover {
background-color: #0056b3;
}
.calculator-result {
margin-top: 25px;
padding: 15px;
border: 1px solid #eee;
border-radius: 5px;
background-color: #fff;
}
.calculator-result h3 {
color: #333;
margin-bottom: 15px;
}
.calculator-result p {
margin-bottom: 10px;
color: #333;
}
.calculator-result strong {
color: #0056b3;
}
.calculator-result ul {
list-style: disc;
margin-left: 20px;
padding-left: 0;
}
.calculator-result li {
margin-bottom: 8px;
color: #555;
}
.calculator-result small {
font-size: 0.8em;
color: #777;
}