Calculating a car lease is significantly more complex than a standard auto loan. While a loan is based on the full price of the vehicle, a lease is essentially paying for the depreciation of the car during the time you drive it, plus interest (known as the Money Factor).
The Core Components of a Lease
Gross Capitalized Cost: This is the negotiated price of the vehicle plus any fees or prior lease balances.
Capitalized Cost Reduction: This includes your down payment, trade-in value, and any manufacturer rebates that reduce the amount being financed.
Residual Value: This is the estimated value of the car at the end of the lease term. It is set by the leasing company and is usually expressed as a percentage of the MSRP.
Money Factor: This is the interest rate on a lease. To convert a Money Factor to a standard APR, multiply it by 2,400. For example, a money factor of 0.00125 equals a 3% APR.
The Math Behind the Result
To find your monthly payment, we calculate two main fees:
The sum of these two provides your base monthly payment, which is then subject to local sales tax.
Leasing Example
If you negotiate a car down to $32,000 with a residual value of $20,000 over 36 months, you are paying for $12,000 of depreciation. Spread over 36 months, that is $333.33/month in depreciation alone. The finance fee (rent charge) is then added based on the Money Factor and the sum of the cap cost and residual.
function calculateLease() {
var msrp = parseFloat(document.getElementById('msrp').value);
var negotiatedPrice = parseFloat(document.getElementById('negotiatedPrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var tradeIn = parseFloat(document.getElementById('tradeIn').value) || 0;
var leaseTerm = parseFloat(document.getElementById('leaseTerm').value);
var residualPercentage = parseFloat(document.getElementById('residualPercentage').value);
var moneyFactor = parseFloat(document.getElementById('moneyFactor').value);
var salesTax = parseFloat(document.getElementById('salesTax').value) || 0;
if (isNaN(msrp) || isNaN(negotiatedPrice) || isNaN(leaseTerm) || isNaN(residualPercentage) || isNaN(moneyFactor)) {
alert("Please enter valid numbers in all required fields.");
return;
}
// 1. Calculate Residual Value
var residualValue = msrp * (residualPercentage / 100);
// 2. Calculate Adjusted Capitalized Cost
var adjCapCost = negotiatedPrice – downPayment – tradeIn;
// 3. Depreciation Fee
// Formula: (Adj Cap Cost – Residual) / Term
var depreciationFee = (adjCapCost – residualValue) / leaseTerm;
if (depreciationFee < 0) depreciationFee = 0;
// 4. Finance Fee (Rent Charge)
// Formula: (Adj Cap Cost + Residual) * Money Factor
var financeFee = (adjCapCost + residualValue) * moneyFactor;
// 5. Base Monthly Payment
var basePayment = depreciationFee + financeFee;
// 6. Tax
var taxAmount = basePayment * (salesTax / 100);
// 7. Total Monthly Payment
var totalMonthlyPayment = basePayment + taxAmount;
// 8. Total Lease Cost (Total of payments + down payment + trade-in)
var totalCost = (totalMonthlyPayment * leaseTerm) + downPayment + tradeIn;
// Display Results
document.getElementById('resBasePayment').innerText = '$' + basePayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTaxAmount').innerText = '$' + taxAmount.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotalPayment').innerText = '$' + totalMonthlyPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotalCost').innerText = '$' + totalCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('leaseResults').style.display = 'block';
}