The current market value of the equipment/property.
The amount paid each period.
Total duration of the lease in months.
Expected value of the asset at the end of the term.
Calculation Result
Understanding the Lease Discount Rate
In accounting standards such as ASC 842 and IFRS 16, determining the discount rate for a lease is crucial for calculating the present value of lease payments. This rate is technically known as the Rate Implicit in the Lease. If this rate cannot be readily determined, lessees often use their Incremental Borrowing Rate (IBR).
How to Calculate the Implicit Rate
The implicit rate is the interest rate that causes the sum of the present value of lease payments and the unguaranteed residual value to equal the fair value of the underlying asset plus any initial direct costs of the lessor.
Fair Value: The amount for which an asset could be exchanged between knowledgeable, willing parties.
Lease Payments: Regular installments paid by the lessee to the lessor.
Residual Value: The estimated value of the asset at the end of the lease term.
Term: The non-cancellable period for which the lessee has the right to use the asset.
The Mathematical Formula
There is no simple algebraic way to isolate the discount rate (r) when residual values and periodic payments are involved. Instead, we use a numerical iteration method (like the Newton-Raphson method) to solve for r in the following equation:
Fair Value = [Payment × ((1 – (1 + r)⁻ⁿ) / r)] + [Residual Value / (1 + r)ⁿ]
Example Calculation
Suppose you lease a piece of industrial machinery with a Fair Value of 100,000. You agree to pay 2,500 per month for 36 months. At the end of the term, the machine has a Residual Value of 20,000. By inputting these figures into the calculator, you would find the implicit annual discount rate required to satisfy the accounting requirements for your balance sheet recognition.
function calculateLeaseDiscountRate() {
var fairValue = parseFloat(document.getElementById('assetFairValue').value);
var payment = parseFloat(document.getElementById('leasePayment').value);
var term = parseFloat(document.getElementById('leaseTerm').value);
var residual = parseFloat(document.getElementById('residualValue').value);
if (isNaN(fairValue) || isNaN(payment) || isNaN(term) || isNaN(residual) || fairValue <= 0 || payment <= 0 || term <= 0) {
alert("Please enter valid positive numbers for all fields.");
return;
}
// Solve for r using Newton-Raphson Method
// We want to find the root of:
// f(r) = Payment * ((1 – (1+r)^-n) / r) + (Residual / (1+r)^n) – FairValue
var r = 0.01; // Initial guess (1% per month)
var precision = 0.0000001;
var maxIterations = 100;
var iteration = 0;
while (iteration < maxIterations) {
var powTerm = Math.pow(1 + r, -term);
var f_r = payment * ((1 – powTerm) / r) + (residual * powTerm) – fairValue;
// Derivative f'(r)
var df_r = payment * (((term * powTerm) / (r * (1 + r))) – ((1 – powTerm) / (r * r))) – (term * residual * Math.pow(1 + r, -term – 1));
var next_r = r – (f_r / df_r);
if (Math.abs(next_r – r) < precision) {
r = next_r;
break;
}
r = next_r;
iteration++;
}
var annualRate = r * 12 * 100;
var monthlyRate = r * 100;
var resultDiv = document.getElementById('leaseResult');
var annualOutput = document.getElementById('annualRateOutput');
var monthlyOutput = document.getElementById('monthlyRateOutput');
if (isNaN(annualRate) || !isFinite(annualRate)) {
annualOutput.innerHTML = "Error in Calculation";
monthlyOutput.innerHTML = "Please check your inputs (e.g., Fair Value vs Total Payments).";
} else {
annualOutput.innerHTML = annualRate.toFixed(4) + "% (Annual Rate)";
monthlyOutput.innerHTML = "Monthly Implicit Rate: " + monthlyRate.toFixed(4) + "%";
}
resultDiv.style.display = 'block';
resultDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}