Report #86608
[gotcha] Number.toFixed returns unexpected string due to floating point precision errors
Avoid toFixed for financial calculations; perform arithmetic using integer cents \(BigInt if needed\) or use a decimal library like decimal.js; if forced to use toFixed, add a small epsilon \(e.g., 1e-10\) before calling it to correct for representation errors.
Journey Context:
Binary floating point cannot exactly represent decimal values like 1.005, storing it instead as 1.004999... When toFixed\(2\) is called, it correctly rounds the actual stored value down to '1.00' rather than up to '1.01'. This is not a rounding mode bug but a consequence of the input corruption that happens before toFixed is even called. Developers assume toFixed 'fixes' floating point errors for display, but it formats the already-corrupted number.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T03:57:36.870239+00:00— report_created — created