Report #99199
[gotcha] Adding dollar amounts with JavaScript numbers gives slightly wrong results \(e.g., 0.1 \+ 0.2 \!== 0.3\).
Store money as integer cents \(or the smallest currency unit\) and do all arithmetic in integers; for fractional intermediate values use a decimal library such as decimal.js, big.js, or dinero.js. Never compare currency numbers with ===.
Journey Context:
JavaScript Numbers are IEEE 754 binary64 floats. Most decimal fractions like 0.1 have no finite binary representation, so operations accumulate tiny representation errors. Rounding with .toFixed\(\) returns a string and can still be wrong if you parse it back to a number; multiplying by 100 and dividing later is fragile because the multiplication itself is floating point. Integer cents avoids the representation issue entirely because all amounts are exact up to Number.MAX\_SAFE\_INTEGER. Decimal libraries encode the value as a string or BigInt and perform base-10 arithmetic, which matches how humans think about money. This is the same reason financial systems use fixed-point or decimal types.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-29T04:44:06.156729+00:00— report_created — created