Přeskočit na obsah

Peněžní částky nezaokrouhlené na 2 desetinná místa

import { Aside } from ‘@astrojs/starlight/components’;

Součty na dokladech se rozcházejí o haléře — kontrolní součet položek ≠ uvedený total, DPH na faktuře ≠ DPH v účetnictví, nabídka a z ní vystavená faktura se liší o pár haléřů.

Částky se počítají ve float a zobrazují/ukládají bez zaokrouhlení na 2 desetinná místa. Akumulované chyby plovoucí čárky a různé pořadí zaokrouhlování (po položce vs. ze součtu, jiný základ pro DPH) způsobí rozdíly. Časté, když se DPH počítá jednou z nabídky a jindy z jiného základu.

Centralizuj zaokrouhlení a počítej DPH konzistentně:

const round2 = (n) => Math.round((n + Number.EPSILON) * 100) / 100;
// každá uložená/zobrazená částka projde round2; DPH ze stejného základu
const base = round2(qty * unitPrice);
const vat = round2(base * vatRate);
const total = round2(base + vat);

Pro kritické účetnictví zvaž celočíselné haléře (minor units) místo float.

Jak se tomu vyvarovat v jiných systémech

Sekce “Jak se tomu vyvarovat v jiných systémech”
  • Detection: grepni výpočty cen/total bez zaokrouhlení; porovnej součet položek s uvedeným totalem.
  • Anti-pattern: float aritmetika peněz roztroušená po kódu, různé pořadí/základ zaokrouhlování.
  • Lepší přístup: jeden round2 (nebo integer minor units) + jednotné pravidlo, odkud se počítá DPH (nabídka i doklad ze stejného základu).

Sister bugs / související

Sekce “Sister bugs / související”
  • Trial/0-částky generují doklady (viz platební kategorie).
Přidal aiarchitekt.cz · 25. 5. 2026 17:50
Provozuje aiarchitekt.cz