Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Handle money and numeric precision correctly with the Alpaca API — numbers-as-strings on the wire, decimals vs floats, rounding/truncation before sending amounts, fractional-share precision, and safe DB storage. Use when handling monetary amounts, order quantities, or prices in any Alpaca integration in any language.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 21% | 0% |
Financial bugs are silent and expensive. Alpaca's wire format and the realities of decimal arithmetic create a few specific traps. This skill is short, opinionated, and language-agnostic.
> Read alpaca-broker-integration first.
Alpaca returns prices, quantities, notional, and money amounts as JSON strings ("100.50", "1.5", "190.2345"), and accepts them as strings on the way in. This is deliberate: it avoids the precision loss of JSON's binary floats.
Rule: parse string money fields into a decimal type, never a binary float/double. Serialize back to a string. Don't let a number ever live as an IEEE-754 float in the money path.
| Language | Use | Avoid | |----------|-----|-------| | Python | decimal.Decimal("100.50") | float("100.50") | | TypeScript/JS | a decimal lib (decimal.js/big.js) or string arithmetic | Number(...), parseFloat | | Go | shopspring/decimal | float64 for accumulation | | Java/Kotlin | java.math.BigDecimal | double |
> Real-world caveat: not every Alpaca endpoint is consistent — some market-data numeric fields come as JSON numbers (e.g. bar OHLC). Prices for display/analytics can tolerate floats; money you move or store must not. Know which field you're touching.
Alpaca generally accepts 2 decimal places for cash amounts and up to 9 for fractional share qty/notional. If you send more precision than allowed, you risk rejection or silent rounding on their side.
Rule: explicitly round/truncate to the target precision before the API call, using a deliberate rounding mode.
floor(amount * 100) / 100.)ROUND_DOWN vs ROUND_HALF_UP) — don't inherit whatever the default float formatting does.amount * percentage for a split allocation), not just at the end.# splitting a deposit across holdings — round each slice down, track remainder
slice = truncate(total * (pct / 100), 2)qty and notional support up to 9 decimal places.qty XOR notional — never both (see alpaca-broker-trading-orders).qty from notional / price and send it — pass notional and let Alpaca compute the fill. Round-tripping through a price you fetched introduces drift.DECIMAL(20, 8) — wide enough for multi-currency and fractional, with headroom beyond Alpaca's 2-dp cash so you never lose data you received.USD, EUR, JPY, …) and carries FX fees. When you touch it, never assume USD — read and store the currency, and treat FX amounts as decimals end-to-end.Related skills: order qty/notional rules → alpaca-broker-trading-orders; journal/transfer amounts → alpaca-broker-journals, alpaca-broker-funding-transfers; reconciling stored vs Alpaca values → alpaca-broker-reconciliation-idempotency.
Other measured skills in the registry, with their headline benchmark lift.