DDB Function (Calligra Sheets)
Compute Calligra DDB depreciation with a chosen declining factor. Reconcile salvage capping, default double decline and permissive period-zero/fractional behavior.
Verification status: 22 selected formulas were executed through the Calligra Sheets 25.04.2 calculation engine library. Exact outputs, mathematical references and source limitations are documented separately. Version 26.08.2 was source-checked only; no GUI-cell or import claim. How formula examples are checked
Period-zero limitation: the tested 25.04.2 engine accepts period 0 and returns an oversized charge, about 666.666666666667 for cost 1000, salvage 100 and life 5. Ordinary schedules should start at period 1.
Quick answer: =DDB(1000;100;5;1) gives approximately 400 in the tested Calligra calculation engine.
Availability and version history
- Introduced: First release not established; the name is present in Calligra 2.4.0 source.
- Supported in: Calligra Sheets 26.08.2, with no retirement established.
- Scope: Desktop Sheets with the Financial module. Examples use English semicolon-separated formulas.
- Checked: October 14, 2026. Selected formulas ran through the official 25.04.2 engine library. Source and independent mathematics were checked. This is engine evidence, with no GUI-cell or import verification; 26.08.2 was source-checked only.
What DDB returns
DDB returns the change in declining book value over a selected period, using factor/life as the depreciation rate. Factor defaults to 2 for double declining balance. The result is floored at zero and capped against salvage in the tested ordinary schedule. Function-specific official reference.
Syntax and arguments
=DDB(cost;salvage;life;period[;factor])
Cost, salvage, life and period are required; factor is optional. Use nonnegative cost and salvage, positive life, a nonnegative factor and valid integer periods for the intended schedule. The explicit guard rejects negative period but permits period zero. Brackets indicate optional arguments and are not entered in the formula. Registration and implementation.
Reproducible engine examples
The engine and mathematical columns are separate. Results are rounded to twelve decimal places, or thirteen significant digits in scientific notation for very small or large values. This is a display choice, not an accuracy guarantee.
| Formula | Engine result | Independent mathematical reference |
|---|---|---|
=DDB(1000;100;5;1) |
400 |
400 |
=DDB(1000;100;5;2) |
240 |
240 |
=DDB(1000;100;5;3) |
144 |
144 |
=DDB(1000;100;5;4) |
86.4 |
86.4 |
=DDB(1000;100;5;5) |
29.6 |
29.6 |
=DDB(1000;100;5;1;1.5) |
300 |
300 |
=DDB(1000;100;5;1;5) |
900 |
900 |
=DDB(1000;100;5;2;5) |
0 |
0 |
Practical worksheet
For cost 1000, salvage 100 and life five periods, the ordinary charges are 400, 240, 144, 86.4 and 29.6. The final charge is limited so the closing value is 100. The advanced check below sums these charges to 900.
With factor 1.5, the first-period charge is 300. With factor at least life, the source uses a special branch: it charges cost minus salvage for period 1, then zero for later periods. This is separate from an automatic switch to straight-line depreciation.
Advanced interpretation and checks
For factor below life, define q=1−factor/life. The uncapped charge for period p is cost×q^(p−1)−cost×q^p. The source then adjusts the end value to respect salvage and prevents negative charges.
Unlike a method that switches to straight line when advantageous, DDB continues this declining formula. Some schedules therefore need an independently specified final adjustment. Fractional period 2.5 is evaluated with real powers; it is not an internally defined half-year allocation. Build and audit the full schedule rather than interpreting an isolated charge as proof of correct policy.
The executed advanced check was:
=DDB(1000;100;5;1)+DDB(1000;100;5;2)+DDB(1000;100;5;3)+DDB(1000;100;5;4)+DDB(1000;100;5;5)
Its engine result was 900.
Boundaries and troubleshooting
Negative cost, salvage, period or factor, and nonpositive life, give #VALUE!. Period zero is accepted, as are fractional and beyond-life periods. Zero factor gives zero. Salvage greater than cost also returned zero in the tested case rather than a domain error.
Nonnumeric cost became zero and yielded zero, potentially hiding a missing amount. Wrong arity gives #VALUE!. Validate numeric types, cost/salvage ordering and integer schedule bounds. These engine calculations establish the selected formulas; they do not determine an external accounting or tax treatment.
| Formula | Engine result |
|---|---|
=DDB(-1000;100;5;1) |
#VALUE! |
=DDB(1000;-100;5;1) |
#VALUE! |
=DDB(1000;100;0;1) |
#VALUE! |
=DDB(1000;100;5;-1) |
#VALUE! |
=DDB(1000;100;5;1;-1) |
#VALUE! |
=DDB(1000;100;5;0) |
666.666666666667 |
=DDB(1000;100;5;2.5) |
185.903200617956 |
=DDB(1000;100;5;6) |
0 |
=DDB(1000;100;5;1;0) |
0 |
=DDB(1000;1200;5;1) |
0 |
=DDB("abc";100;5;1) |
0 |
=DDB(1000;100;5) |
#VALUE! |
=DDB(1000;100;5;1;2;0) |
#VALUE! |
Official evidence and precision scope
The financial module and value-calculation helpers are byte-identical between the inspected 25.04.2 and 26.08.2 sources. That comparison supports the source discussion but does not establish later-version execution, GUI-cell behavior or other locales.