Calculate your monthly lease payments and total cost of ownership.
24 Months
36 Months
48 Months
60 Months
Estimated Monthly Payment$0.00
Total Depreciation: $0.00
Finance Charge: $0.00
Residual Value: $0.00
Total Out-of-Pocket: $0.00
How Your Car Lease Payment is Calculated
Lease payments are not just random numbers generated by a dealership; they are based on a specific mathematical formula involving three main components: Depreciation, the Money Factor (Interest), and Sales Tax.
1. Monthly Depreciation
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 in the term.
2. The Money Factor (Finance Charge)
In a lease, interest is called the "Money Factor." To find the monthly finance charge, the formula adds the Adjusted Cap Cost to the Residual Value and multiplies that sum by the Money Factor. If you have an APR (like 4.8%), you divide it by 2400 to get the Money Factor (0.002).
3. Sales Tax
Unlike a purchase where you might pay tax on the full value of the car, most states only charge sales tax on the monthly lease payment itself.
Pro Tip: Negotiate the "Cap Cost"
Most people think they can only negotiate the monthly payment. In reality, you should negotiate the Sale Price (Capitalized Cost) just like you would if you were buying the car. Every $1,000 you shave off the sale price reduces your monthly payment by approximately $28–$30 on a 36-month lease.
Car Lease Example
Let's look at a realistic scenario for a modern sedan:
MSRP: $30,000
Negotiated Price: $28,000
Residual Value: 60% ($18,000)
Down Payment: $2,000
Term: 36 Months
Estimated Payment: ~$345/month (depending on local tax and credit score)
function calculateLease() {
var msrp = parseFloat(document.getElementById('msrp').value);
var salePrice = parseFloat(document.getElementById('salePrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value) || 0;
var tradeIn = parseFloat(document.getElementById('tradeIn').value) || 0;
var term = parseInt(document.getElementById('leaseTerm').value);
var apr = parseFloat(document.getElementById('apr').value);
var residualPerc = parseFloat(document.getElementById('residualPerc').value);
var taxRate = parseFloat(document.getElementById('salesTax').value) || 0;
if (isNaN(msrp) || isNaN(salePrice) || isNaN(apr) || isNaN(residualPerc)) {
alert("Please fill in all required fields with valid numbers.");
return;
}
// 1. Calculate Adjusted Capitalized Cost
var capCostReduction = downPayment + tradeIn;
var adjustedCapCost = salePrice – capCostReduction;
// 2. Calculate Residual Value
var residualValue = (residualPerc / 100) * msrp;
// 3. Calculate Monthly Depreciation
var totalDepreciation = adjustedCapCost – residualValue;
if (totalDepreciation < 0) totalDepreciation = 0;
var monthlyDepreciation = totalDepreciation / term;
// 4. Calculate Monthly Rent Charge (Finance Fee)
// Money Factor = APR / 2400
var moneyFactor = apr / 2400;
var monthlyRentCharge = (adjustedCapCost + residualValue) * moneyFactor;
// 5. Calculate Subtotal and Tax
var monthlyBasePayment = monthlyDepreciation + monthlyRentCharge;
var monthlyTax = monthlyBasePayment * (taxRate / 100);
var totalMonthlyPayment = monthlyBasePayment + monthlyTax;
// 6. Calculate Total Cost of Lease
var totalLeaseCost = (totalMonthlyPayment * term) + capCostReduction;
// Display Results
document.getElementById('leaseResult').style.display = 'block';
document.getElementById('monthlyPaymentDisplay').innerText = '$' + totalMonthlyPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalDepreciation').innerText = '$' + totalDepreciation.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalRentCharge').innerText = '$' + (monthlyRentCharge * term).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('residualValueAmount').innerText = '$' + residualValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalLeaseCost').innerText = '$' + totalLeaseCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Smooth scroll to results
document.getElementById('leaseResult').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}