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 potential mortgage amount based on your income, debts, and current interest rates. Remember, this is an estimate, and a lender will perform a more thorough analysis.
.calculator-container {
font-family: Arial, sans-serif;
border: 1px solid #ccc;
padding: 20px;
border-radius: 8px;
max-width: 600px;
margin: 20px auto;
background-color: #f9f9f9;
}
.calculator-inputs {
display: grid;
grid-template-columns: 1fr;
gap: 15px;
margin-bottom: 20px;
}
.input-group {
display: flex;
flex-direction: column;
}
.input-group label {
margin-bottom: 5px;
font-weight: bold;
color: #333;
}
.input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1em;
}
button {
background-color: #4CAF50;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1.1em;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #45a049;
}
.calculator-result {
margin-top: 20px;
padding: 15px;
background-color: #e0f7fa;
border: 1px solid #b2ebf2;
border-radius: 4px;
font-size: 1.1em;
text-align: center;
font-weight: bold;
color: #006064;
}
function calculateMortgageAffordability() {
var monthlyIncome = parseFloat(document.getElementById("monthlyIncome").value);
var existingDebts = parseFloat(document.getElementById("existingDebts").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var interestRate = parseFloat(document.getElementById("interestRate").value) / 100;
var loanTerm = parseFloat(document.getElementById("loanTerm").value);
var resultElement = document.getElementById("result");
resultElement.innerHTML = ""; // Clear previous results
if (isNaN(monthlyIncome) || isNaN(existingDebts) || isNaN(downPayment) || isNaN(interestRate) || isNaN(loanTerm)) {
resultElement.innerHTML = "Please enter valid numbers for all fields.";
return;
}
// Common lending guidelines suggest that total debt (including housing) should not exceed 36% of gross monthly income.
// However, we're using net (after tax) income for a more practical estimate here.
// A common benchmark for PITI (Principal, Interest, Taxes, Insurance) is around 28% of gross,
// but for simplicity and using net income, we'll aim for a higher percentage,
// acknowledging this is a simplified model.
// Let's assume a maximum affordable monthly mortgage payment (PITI) that is roughly 40-50% of income
// after deducting existing debts. This is a heuristic and can vary significantly.
// For this calculator, we'll use a Debt-to-Income (DTI) ratio approach focusing on 'disposable income'.
var maxHousingPaymentPercentage = 0.50; // 50% of remaining income after debts
var affordableMonthlyPayment = (monthlyIncome – existingDebts) * maxHousingPaymentPercentage;
if (affordableMonthlyPayment <= 0) {
resultElement.innerHTML = "Based on your income and debts, it appears you may not have enough disposable income for a mortgage at this time.";
return;
}
// Now, we need to find the loan amount that results in this affordableMonthlyPayment.
// This requires working backward from the mortgage payment formula.
// M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
// Where:
// M = Monthly Payment (affordableMonthlyPayment)
// P = Principal Loan Amount (what we want to find)
// i = monthly interest rate (interestRate / 12)
// n = total number of payments (loanTerm * 12)
var monthlyInterestRate = interestRate / 12;
var numberOfPayments = loanTerm * 12;
// Rearranging the formula to solve for P:
// P = M [ (1 + i)^n – 1] / [ i(1 + i)^n ]
var numerator = Math.pow(1 + monthlyInterestRate, numberOfPayments) – 1;
var denominator = monthlyInterestRate * Math.pow(1 + monthlyInterestRate, numberOfPayments);
// Handle cases where the denominator might be zero or very close to zero (e.g., 0% interest rate, though unlikely for mortgages)
if (denominator === 0 || isNaN(denominator)) {
resultElement.innerHTML = "Cannot calculate affordability with these parameters (possible 0% interest rate or too many years).";
return;
}
var estimatedLoanAmount = affordableMonthlyPayment * (numerator / denominator);
// The total estimated home price you can afford is the loan amount plus your down payment.
var estimatedHomePrice = estimatedLoanAmount + downPayment;
// Format the results for better readability
var formattedLoanAmount = estimatedLoanAmount.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
var formattedHomePrice = estimatedHomePrice.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
var formattedMonthlyPayment = affordableMonthlyPayment.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
resultElement.innerHTML =
"Estimated Maximum Monthly Mortgage Payment (PITI): " + formattedMonthlyPayment + "" +
"Estimated Maximum Loan Amount: " + formattedLoanAmount + "" +
"Estimated Maximum Home Purchase Price (incl. down payment): " + formattedHomePrice + "";
}