Report #41356
[gotcha] Math.round\(1.015 \* 100\) returns 101 instead of 102 due to IEEE 754 binary floating point representation
Never use floating point arithmetic for monetary calculations; store and operate on integer cents \(using BigInt for large values\) or use dedicated decimal libraries like decimal.js or dinero.js
Journey Context:
Developers commonly convert dollars to cents by multiplying by 100 and rounding, expecting decimal math. However, IEEE 754 double-precision cannot exactly represent decimal fractions like 1.015 \(stored as ~1.0149999999999999\). Multiplying by 100 yields ~101.49999999999999, which Math.round\(\) floors to 101 instead of the expected 102. The 'add epsilon' workaround found online is unreliable for arbitrary decimals. The only robust solution is to avoid floating point for money entirely, using integer arithmetic on the smallest currency unit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T23:53:18.530630+00:00— report_created — created