mcpField
D
decimal-js

decimal-js

github.com/dobroslavradosavljevicDevelopment344 installsUpdated 3d ago
Repository

About decimal-js

The decimal-js skill guides developers using decimal.js v10 for arbitrary-precision decimal arithmetic. It covers configuration, rounding, money-safe patterns, serialization, and advanced math, emphasizing string construction, immutable instances, and isolated configuration with clone.

Key features

  1. 01Guide arbitrary-precision decimal arithmetic
  2. 02Configure precision and rounding modes
  3. 03Handle money and serialization
  4. 04Isolate configuration with clone
  5. 05Explain advanced math and library choices

Use cases

  1. 01Implement currency calculations without floating-point errors
  2. 02Round values to specified decimal places
  3. 03Transfer decimal values through JSON or storage
  4. 04Isolate Decimal settings across libraries or domains

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dobroslavradosavljevic/skills --skill decimal-js

After installing, type/decimal-jsin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

agents/
openai.yaml
references/
advanced-ecosystem.md
arithmetic-api.md
config-rounding.md
money-serialization.md
pitfalls.md
setup-core.md
source-map.md

Details

From the project README

decimal.js

Use this skill for decimal.js v10 arbitrary-precision decimal arithmetic: construction, config, rounding, money-safe patterns, serialization, and advanced math.

Workflow

  1. Inspect the local surface before changing code:
    • Package: decimal.js (and siblings decimal.js-light, bignumber.js, big.js if present).
    • Version: target v10 (current 10.6.0); bundled decimal.d.ts (BigInt in types since 10.6.0).
    • Domain: money/currency, scientific, or general — this drives clone config and whether significant-digit precision alone is enough.
    • Imports: default or named Decimal from "decimal.js".
  2. Refresh docs when versions are unclear or work touches rounding, money, trig, or library isolation. Start from source-map.md.
  3. Route deeper detail:
  4. Match the project's constructor style (Decimal vs domain clone). Do not call global Decimal.set inside published libraries.
  5. Verify with typecheck plus tests for string construction, rounding mode, toDP/toFixed, and serialization round-trips.

Library Decision Tree

Need trig / ln / exp / non-integer pow / wide exponents?
  → decimal.js (this skill)

Exact add/mul until division, finance-first, smaller API?
  → consider bignumber.js (author guidance) — or stay on decimal.js with Money clone + toDP

Tiny bundle, basic DP only?
  → big.js or decimal.js-light

Using decimal.js for money anyway?
  → Decimal.clone({ precision: 28, rounding: … }) + construct from strings + round once with toDP/toFixed

Core Judgment

  • Construct from strings (or BigInt / Decimal) for money and multi-digit values. Never new Decimal(0.1 + 0.2) or Number arithmetic first.
  • Instances are immutable. Chain methods; do not expect in-place mutation.
  • precision = significant digits for (almost) all arithmetic results — not currency decimal places. Use toDecimalPlaces / toDP (or toFixed for strings) for fixed fractional places.
  • Prefer Decimal.clone({…}) for libraries and multi-domain apps. Use Decimal.set only for app-wide boot config.
  • Value equality: .eq / .cmp, never === / ==.
  • Serialize as strings (toJSON / toFixed / toString). Avoid toNumber() for money or persisted values.
  • Default rounding is ROUND_HALF_UP (4). Pick explicitly for finance (HALF_UP / HALF_EVEN / jurisdiction rules).
  • Configure via set/config/clone — never assign Decimal.precision = … directly (skips validation).

Verification

Prefer repository-owned commands. Cover the relevant subset:

  • bun pm ls decimal.js (and light / big / bignumber if migrating).
  • Typecheck for Decimal.Value, Decimal.Config, clone constructors.
  • Tests: string vs number construction, eq vs ===, toDP/toFixed rounding modes, penny-allocation / tax edges, JSON hydrate (new Decimal(dto.amount)), signed zero if relevant.
  • Bundle/size check only when choosing light vs full.

Report which checks ran, which did not, and version/config assumptions that remain.

Comments

Markdown supported