Report #58748
[gotcha] Decimal\(0.1\) creates 53-digit precision garbage because float is binary
Pass strings or integers to Decimal\(\), never floats; use Decimal\('0.1'\) or Decimal\(str\(x\)\) only if x is already a float and you accept the loss
Journey Context:
Python floats are IEEE 754 binary64. When you pass 0.1 to Decimal, the float has already lost the decimal war; Decimal records the exact binary value, which requires ~53 bits \(~17 decimal digits\) and looks like 0.100000000000000005551115... This surprises users expecting Decimal to 'fix' float imprecision. Converting float to string first rounds to 12 digits by default, which may still be wrong for high-precision needs. The only robust pattern is to keep data as strings or integers from source to Decimal, as the constructor docs explicitly warn that float input is 'lossless' in the sense of capturing the binary value exactly, which is usually not what you want.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:05:56.949326+00:00— report_created — created