How to Calculate Double Declining Depreciation Rate

Double Declining Balance Depreciation Calculator

Results

Double Declining Rate: %

Depreciation Expense (Year ):

Accumulated Depreciation:

Ending Book Value:

Year Start Book Value Depreciation End Book Value

How to Calculate Double Declining Depreciation Rate

The Double Declining Balance (DDB) method is an accelerated depreciation form that recovers the cost of an asset much faster than the standard straight-line method. It is particularly useful for assets that lose their value quickly in the early years of their useful life, such as technology or vehicles.

The DDB Formula

To calculate the double declining depreciation, you follow these steps:

  1. Calculate the Straight-Line Rate: 1 / Useful Life of the asset.
  2. Calculate the DDB Rate: 2 × Straight-Line Rate.
  3. Apply the Rate: Multiply the DDB Rate by the current Book Value (Initial Cost – Accumulated Depreciation) at the start of the year.

Note: Depreciation stops once the book value reaches the estimated salvage value.

Example Calculation

Suppose you purchase a piece of machinery for $10,000 with a salvage value of $1,000 and a useful life of 5 years.

  • Straight-line rate = 1 / 5 = 20%
  • Double Declining Rate = 20% × 2 = 40%
  • Year 1: $10,000 × 40% = $4,000 depreciation. (Book Value: $6,000)
  • Year 2: $6,000 × 40% = $2,400 depreciation. (Book Value: $3,600)
  • Year 3: $3,600 × 40% = $1,440 depreciation. (Book Value: $2,160)

When to Use Double Declining Balance

This method is ideal for businesses looking to minimize taxable income in the short term, as it results in higher expenses during the initial years of an asset's life. It is commonly applied to machinery, computer equipment, and specialized tools that face rapid obsolescence.

function calculateDDB() { var cost = parseFloat(document.getElementById('assetCost').value); var salvage = parseFloat(document.getElementById('salvageValue').value); var life = parseFloat(document.getElementById('usefulLife').value); var targetYear = parseInt(document.getElementById('calcYear').value); var resultDiv = document.getElementById('ddbResult'); var scheduleBody = document.getElementById('scheduleBody'); if (isNaN(cost) || isNaN(salvage) || isNaN(life) || isNaN(targetYear) || life <= 0 || targetYear cost) { alert('Salvage value cannot be greater than the initial cost.'); return; } var straightLineRate = 1 / life; var ddbRate = straightLineRate * 2; var currentBookValue = cost; var accumulatedDepreciation = 0; var outputYearExpense = 0; var outputAccumulated = 0; var outputBookValue = 0; scheduleBody.innerHTML = "; resultDiv.style.display = 'block'; for (var i = 1; i <= life; i++) { var startValue = currentBookValue; var expense = currentBookValue * ddbRate; // Ensure we don't depreciate below salvage value if (currentBookValue – expense < salvage) { expense = currentBookValue – salvage; } // If we are already at salvage value if (expense < 0) expense = 0; currentBookValue -= expense; accumulatedDepreciation += expense; if (i === targetYear) { outputYearExpense = expense; outputAccumulated = accumulatedDepreciation; outputBookValue = currentBookValue; } var row = scheduleBody.insertRow(); row.innerHTML = '' + i + '' + '$' + startValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + '' + '$' + expense.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + '' + '$' + currentBookValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ''; } document.getElementById('resRate').innerText = (ddbRate * 100).toFixed(2); document.getElementById('resTargetYear').innerText = targetYear; if (targetYear > life) { document.getElementById('resExpense').innerText = "$0.00 (Beyond Life)"; document.getElementById('resAccumulated').innerText = "$" + (cost – salvage).toLocaleString(undefined, {minimumFractionDigits: 2}); document.getElementById('resBookValue').innerText = "$" + salvage.toLocaleString(undefined, {minimumFractionDigits: 2}); } else { document.getElementById('resExpense').innerText = "$" + outputYearExpense.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resAccumulated').innerText = "$" + outputAccumulated.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resBookValue').innerText = "$" + outputBookValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); } }

Leave a Comment