Methodology & Accuracy
Last reviewed: August 12, 2026
An invoice is a document someone checks with a calculator. This page documents exactly how the figures are produced, and — just as importantly — what this tool deliberately does not do.
Money is held in whole cents, never as a decimal
Every amount is stored as an integer number of cents. Decimal fractions cannot be represented
exactly in binary floating point: 0.1 + 0.2 evaluates to
0.30000000000000004. That is a curiosity in isolation and a dispute on a
hundred-line invoice, where the accumulated fractions produce a subtotal that does not match the
column above it. Integer cents make the arithmetic exact.
Rounding happens once, at the line
Each line is quantity × unit price, rounded to a cent immediately, and the subtotal is the sum of those rounded lines. The alternative — keeping full precision and rounding only the total — is marginally more accurate and visibly wrong to a reader, because the printed lines would not add up to the printed subtotal. The document has to reconcile in the hand of the person holding it.
Rounding is half away from zero (0.5 → 1, −0.5 → −1), which is how people round by hand. Banker's rounding is better behaved statistically and would surprise every user, so it is not used. Sub-cent unit prices are rounded to a printable price before multiplying, for the same reason: a line reading “0.12 × 3 = 0.35” looks like an error even when the exact arithmetic supports it.
Order of operations
Subtotal → discount → taxable base → tax → shipping → total → amount paid → balance due. The discount comes off before tax, because tax is owed on what was actually charged. Shipping is added after tax, which is a simplification: some jurisdictions tax freight, and this tool does not model that. If yours does, add shipping as a line item instead so it falls inside the taxable base.
Inclusive tax is extracted, not added
With tax set to “added on top”, $120.00 at 20% becomes $144.00 — the tax of $24.00 sits on top. With tax set to “already included”, the same $120.00 contains $20.00 of tax and the total stays $120.00: the tax is found by dividing by 1 + the rate, never by subtracting a percentage. Subtracting 20% from a VAT-inclusive price overstates the tax by a fifth, and it is the most common arithmetic error on hand-made invoices. Both figures above were computed by the engine when this page was built.
Limits
- Up to 200 lines per document; tax and discount rates up to 100%.
- Quantities are held to four decimal places, so billed hours like 3.3333 do not drift.
- A discount can reduce a document to zero, never below it.
- Overpayment shows a balance due of zero rather than a negative amount.
- Ten currency symbols are offered. The symbol is a label printed on the document — no conversion is performed and no exchange rate is applied, so every figure stays in the currency you entered.
- A logo can be added: PNG or JPEG up to 2 MB, drawn top-right at up to 42 × 16 mm with its aspect ratio preserved. Like everything else, it is read and drawn on your device — never uploaded.
What this does not do
It is a document generator, not an accounting system and not tax advice. It does not file anything, track payment, chase late payers, apply per-jurisdiction tax rules, validate tax numbers, handle multi-currency conversion, or number your documents sequentially across sessions. It stores nothing: close the tab and the document is gone, so download the PDF. If you need recurring billing or bookkeeping, you need software with an account, and this is deliberately not that.
Nothing leaves your browser
The document is assembled and drawn into a PDF on your own device. Your clients, prices and notes are never uploaded — there is no server to send them to and no database that could leak them. That is a property of the architecture, not a policy we could change quietly.
Tested against hand-computed figures
The money engine is covered by automated tests that check it against figures worked out by hand: the float trap, half-up rounding, line reconciliation across many price and quantity combinations, discount-before-tax ordering, VAT extraction, and the balance-due floor. The worked examples on this site are computed at build time by that same engine, so the prose cannot disagree with the tool. If you believe a figure is wrong, that is exactly the report we want — see the contact page.