Calculate your precise monthly lease payment including depreciation, rent charges, and taxes.
Gross Capitalized Cost:$0.00
Adjusted Capitalized Cost:$0.00
Residual Value:$0.00
Monthly Depreciation:$0.00
Monthly Rent Charge (Interest):$0.00
Monthly Tax:$0.00
Total Monthly Payment:$0.00
How Car Lease Payments are Calculated
Understanding a car lease can be complex because it involves terminology different from standard auto loans. Unlike a loan where you pay for the entire value of the car, a lease only charges you for the value of the vehicle you "use" during the term, plus interest and fees.
The Three Pillars of Lease Math
Depreciation Fee: This is the largest part of your payment. It is the difference between the Adjusted Capitalized Cost (the price you negotiated minus your down payment) and the Residual Value (what the car is worth at the end of the lease), divided by the number of months.
Rent Charge (Money Factor): This is essentially the interest rate on the lease. The formula is unique: (Adjusted Cap Cost + Residual Value) × Money Factor. To convert a Money Factor to a standard APR, multiply it by 2,400.
Sales Tax: In most states, sales tax is applied to the monthly payment rather than the full value of the car.
Example Calculation
Imagine a car with an MSRP of $40,000 and a Residual Value of 60% ($24,000). You negotiate the price down to $38,000 and put $2,000 down. Your Adjusted Cap Cost is $36,000.
To get the best deal, focus on the Negotiated Price (Cap Cost). Many people mistakenly believe lease prices are set in stone; however, the sales price is almost always negotiable. Additionally, look for vehicles with high Residual Values; cars that hold their value better will result in lower monthly depreciation charges.
function calculateLease() {
var msrp = parseFloat(document.getElementById('msrp').value);
var salesPrice = parseFloat(document.getElementById('salesPrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var tradeIn = parseFloat(document.getElementById('tradeIn').value) || 0;
var rebates = parseFloat(document.getElementById('rebates').value) || 0;
var term = parseInt(document.getElementById('leaseTerm').value);
var residualPercent = parseFloat(document.getElementById('residualPercent').value);
var moneyFactor = parseFloat(document.getElementById('moneyFactor').value);
var taxRate = parseFloat(document.getElementById('taxRate').value);
if (isNaN(msrp) || isNaN(salesPrice) || isNaN(term) || term <= 0) {
alert("Please enter valid numbers for price and term.");
return;
}
// 1. Calculate Residual Value
var residualValue = msrp * (residualPercent / 100);
// 2. Calculate Adjusted Capitalized Cost
var adjCapCost = salesPrice – downPayment – tradeIn – rebates;
if (adjCapCost < residualValue) {
alert("Adjusted Cap Cost cannot be less than Residual Value. Check your down payment or sales price.");
return;
}
// 3. Monthly Depreciation
var monthlyDepreciation = (adjCapCost – residualValue) / term;
// 4. Monthly Rent Charge
// Formula: (Adj Cap Cost + Residual) * Money Factor
var monthlyRent = (adjCapCost + residualValue) * moneyFactor;
// 5. Base Monthly Payment
var basePayment = monthlyDepreciation + monthlyRent;
// 6. Tax
var monthlyTax = basePayment * (taxRate / 100);
// 7. Total Monthly Payment
var totalPayment = basePayment + monthlyTax;
// Display results
document.getElementById('resGrossCap').innerText = "$" + salesPrice.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resAdjCap').innerText = "$" + adjCapCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resResidual').innerText = "$" + residualValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resDepreciation').innerText = "$" + monthlyDepreciation.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resRent').innerText = "$" + monthlyRent.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTax').innerText = "$" + monthlyTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotal').innerText = "$" + totalPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('leaseResult').style.display = 'block';
}