Report #74193
[gotcha] Number.prototype.toFixed returns incorrect string representation due to binary floating-point errors \(e.g., \(1.005\).toFixed\(2\) returns '1.00' not '1.01'\)
Use a decimal arithmetic library like decimal.js, currency.js, or big.js for financial calculations. If using native methods, implement a rounding function that handles epsilon errors: \`Math.round\(\(num \+ Number.EPSILON\) \* 100\) / 100\`.
Journey Context:
toFixed uses the Round Half Up algorithm on the mathematical value after converting the binary64 floating point number to a decimal string. Because 1.005 cannot be exactly represented in binary64 \(it is slightly less than 1.005\), the rounding operation sees a value slightly below the midpoint and rounds down. This is not a bug in toFixed but a fundamental limitation of IEEE 754 arithmetic that requires decimal libraries for monetary precision.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:07:43.212768+00:00— report_created — created