NPV Function (Calligra Sheets)
Discount periodic cash flows with Calligra NPV. Check first-payment timing, initial investment placement, array order and text/error conversion in tested examples.
Verification status: 21 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
Input-conversion caution: the tested 25.04.2 engine converts nonnumeric text and embedded errors to zero while retaining their payment positions. Check the cash-flow data before using the result.
Quick answer: =NPV(.1;100;100;100) gives approximately 248.685199098422 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 NPV returns
NPV discounts each supplied cash flow by its position, starting one period after the valuation date: value1/(1+rate)+value2/(1+rate)^2+… . The result retains cash-flow signs. It is not a date-aware discount calculation. Function-specific official reference.
Syntax and arguments
=NPV(rate;value1[;value2;...])
Rate and at least one value or array are required. Use a rate per cash-flow interval. Additional scalar values or arrays are accepted; the counter continues through their visited elements. A zero-valued period must remain present when the timing matters. 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. Inline arrays in braces are formula values, not a workbook-import test. Their semicolons separate columns and vertical bars separate rows. Strings remain explicitly quoted, and booleans use TRUE()/FALSE().
| Formula | Engine result | Independent mathematical reference |
|---|---|---|
=NPV(.1;100;100;100) |
248.685199098422 |
248.685199098422 |
=NPV(.1;{-1000;200;300;400;500}) |
65.258831053517 |
65.258831053517 |
=NPV(.1;{100;100;100}) |
248.685199098422 |
248.685199098422 |
=NPV(0;100;200;300) |
600 |
600 |
=NPV(.05;500;600;700) |
1625.094482237339 |
1625.094482237339 |
=NPV(.1;100) |
90.909090909091 |
90.909090909091 |
=NPV(.1;100;0;100) |
166.040570999249 |
166.040570999249 |
=NPV(.1;{100;200|300;400}) |
754.79816952394 |
754.79816952394 |
Practical worksheet
For three annual receipts of 100 at a 10% annual discount rate, =NPV(.1;100;100;100) gives approximately 248.685199098422. All three receipts are in the future; the first is discounted once.
For an investment of 1000 today followed by receipts of 200, 300, 400 and 500, use =-1000+NPV(.1;200;300;400;500). The independent result is approximately 71.784714158869. Putting −1000 inside NPV instead discounts the entire sequence one additional period and gives approximately 65.258831053517. These describe different valuation dates.
Advanced interpretation and checks
The two-dimensional array example is visited as 100, 200, 300, 400, giving approximately 754.798169523940 at 10%. A one-dimensional cash-flow range is easier to audit than relying on two-dimensional traversal order.
At rate zero the result is the sum of the supplied amounts. A retained zero between two receipts still consumes a period: NPV(.1;100;0;100) differs from NPV(.1;100;100). The executed identity below independently expands three discounted terms; its tiny residual is floating-point rounding.
The executed advanced check was:
=NPV(.1;100;200;300)-(100/1.1+200/1.1^2+300/1.1^3)
Its engine result was 8.310019339319E-14.
Boundaries and troubleshooting
Numeric text such as “200” is parsed, but “abc” and 1/0 contribute zero without shortening the sequence. TRUE/FALSE contribute 1/0. Nonnumeric rate text becomes zero. Validate numeric types and input errors instead of interpreting every finite result as a clean calculation.
Rate −1 causes division by zero. Rates below −1 can return finite alternating-sign arithmetic, but they are outside the ordinary positive-discount-factor model. Use rate greater than −1 for that model. Incorrect argument counts give #VALUE!. Empty workbook-cell behavior was not tested by these inline expressions.
| Formula | Engine result |
|---|---|
=NPV(-.1;100;200) |
358.024691358025 |
=NPV(-1;100) |
#DIV/0! |
=NPV(-2;100;100) |
0 |
=NPV(.1;100;"200";300) |
481.592787377911 |
=NPV(.1;100;"abc";300) |
316.303531179564 |
=NPV(.1;{100;"200";300}) |
481.592787377911 |
=NPV(.1;{100;"abc";300}) |
316.303531179564 |
=NPV(.1;TRUE();FALSE();100) |
76.040570999249 |
=NPV(.1;100;1/0;300) |
316.303531179564 |
=NPV("abc";100;200) |
300 |
=NPV(.1) |
#VALUE! |
=NPV() |
#VALUE! |
Official evidence and precision scope
- Function-specific implementation
- Versioned function help
- Npv Walk helper
- Array Walk helper
- Arithmetic helper
- Power helper
- Conversion helper
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.
Related guides
PV-ANNUITY, SUM, POWER.