Excel 16.0 build 20430
Windows, 64-bit, CPU not recorded
8,852 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.
Financial functions
Matches all 1,211 recorded answers
Recorded: 1,205 in the answer bank and 6 workbook cells. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | SLN |
| Bulgarian | SLN |
| Czech | ODPIS.LIN |
| Danish | LA |
| German | SLN |
| Greek | SLN |
| English (Australia) | SLN |
| English (United Kingdom) | SLN |
| English (United States) | SLN |
| Spanish | SLN |
| Estonian | SLN |
| Finnish | STP |
| French | SLN |
| Hebrew | SLN |
| Croatian | SLN |
| Hungarian | LCSA |
| Indonesian | SLN |
| Italian | SLN |
| Japanese | SLN |
| Korean | SLN |
| Lithuanian | SLN |
| Latvian | SLN |
| Norwegian | SLN |
| Dutch | LIN.AFSCHR |
| Polish | SLN |
| Portuguese (Brazil) | SLN |
| Portuguese (Portugal) | AMORT |
| Romanian | SLN |
| Russian | АПЛ |
| Slovak | SLN |
| Slovenian | SLN |
| Serbian (Latin) | SLN |
| Swedish | LINAVSKR |
| Thai | SLN |
| Turkish | DA işlevi |
| Ukrainian | SLN |
| Vietnamese | SLN |
| Chinese (Simplified) | SLN |
| Chinese (Hong Kong) | SLN |
| Chinese (Traditional) | SLN |
Names from Microsoft's support site.
SLN(cost, salvage, life)
SLN(cost,salvage,life) returns one period’s straight-line depreciation: an equal share of the depreciable amount over the stated life.
=SLN(1200,200,5) returns 200. The depreciable amount is 1000 and five equal periods divide it into shares of 200.
Life is a count of periods, with the same time unit used for the requested allowance. There is no current-period argument and no accumulated balance. The current kernel admits either sign of cost and salvage and any nonzero life, including negative life; it returns #DIV/0! for exactly zero life. That arithmetic admission is broader than an ordinary asset-depreciation schedule.
The subtraction and division have different rounding steps. A subnormal difference is retained until division, while a final subnormal amount is published as positive zero. Nonfinite numeric inputs or a nonfinite result give #NUM! in this kernel; failed worksheet numeric conversion is handled outside it. Microsoft's opened page defines the arguments but does not enumerate these edge codes.
life=0 with #DIV/0!; do not introduce a positive-life guard when reproducing the current route.difference=cost-salvage with ordinary binary64 subtraction. Preserve a subnormal difference at this point.result=R(difference/life) with the stored operation: round the quotient to a 64-bit significand, then store to binary64. A single ordinary binary64 divide is a different graph.#NUM!. If its magnitude is below the minimum normal binary64 value, return positive zero. Otherwise publish it.For 1200,200,5, the difference is exactly 1000 and the quotient exactly 200. Changing life to -5 makes this code return -200; it does not create a different depreciation method. Changing salvage changes the depreciable amount before the division.
The source attributes this quotient and final-flush route to retained Excel build-20430, compatibility-version-2 probes. Its input conversion and worksheet context are separate obligations; this recipe is not a published Handbook conformance suite.
Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.
SLN · 3 lines · calc-func/src/catalogue/financial.rs on GitHub21 sln_fn "SLN" (3, 3) [V "cost", V "salvage", V "life"] |s, a, sv| {
out(s, dep::sln_kernel(num(s, a, 0)?, num(s, a, 1)?, num(s, a, 2)?))
}
sln_kernel · 18 lines · calc-func/src/ported/depreciation_family.rs on GitHubpub fn sln_kernel(cost: f64, salvage: f64, life: f64) -> Result<f64, WorksheetErrorCode> {
validate_finite(&[cost, salvage, life])?;
if life == 0.0 {
return Err(WorksheetErrorCode::Div0);
}
// SLN admits either sign and every nonzero life. The observed quotient is
// rounded through the existing extended-precision division substrate.
// Preserve subnormal differences until division: only the published result
// is flushed to positive zero (Excel 16.0 build 20430, CV2, W111 probes).
let result = crate::ported::excel_numeric::excel_x87_div(cost - salvage, life);
if !result.is_finite() {
Err(WorksheetErrorCode::Num)
} else if result.abs() < f64::MIN_POSITIVE {
Ok(0.0)
} else {
Ok(result)
}
}
validate_finite ported/depreciation_familybinary_with ported/excel_numericexcel_x87_div ported/excel_numericdiv ported/excel_numeric/x87No implementation has been published with a Handbook test suite for this function.
The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.
| Excel 16.0 build | Platform and CPU | Captured inputs |
|---|---|---|
| 20430 | Windows, 64-bit, CPU not recorded | 8,852 |
The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.
Recorded environments and comparison details.
Windows, 64-bit, CPU not recorded
8,852 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.
SYD front-loads the allowance; DB and DDB use declining-balance methods.
No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents