decimal-js について
decimal.js v10を使う開発者向けに、任意精度の十進演算を案内するスキルです。設定、丸め、金額処理、シリアライズ、高度な数学を扱い、文字列による値の生成やcloneでの設定分離を重視します。
主な機能
- 01任意精度の十進演算の案内
- 02精度と丸めモードの設定
- 03金額処理とシリアライズ
- 04cloneによる設定の分離
- 05高度な数学とライブラリ選択の解説
活用シーン
- 01浮動小数点誤差を避けた通貨計算
- 02指定した小数位への丸め
- 03JSONやストレージで十進値を受け渡し
- 04ライブラリや領域ごとにDecimal設定を分離
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill decimal-jsインストール後、Claude Code で/decimal-jsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/advanced-ecosystem.mdarithmetic-api.mdconfig-rounding.mdmoney-serialization.mdpitfalls.mdsetup-core.mdsource-map.md詳細
decimal.js
decimal.js v10の任意精度十進演算(インスタンスの生成、設定、丸め、金額を安全に扱うパターン、シリアライズ、高度な数学関数)には、このスキルを使用してください。
ワークフロー
- コードを変更する前に、ローカルの状況を確認します。
- パッケージ:
decimal.js(および、存在する場合は兄弟ライブラリのdecimal.js-light、bignumber.js、big.js)。 - バージョン:対象はv10(現行は
10.6.0)。同梱のdecimal.d.ts(型定義でBigIntに対応したのは10.6.0以降)。 - ドメイン:金額/通貨、科学技術計算、または一般用途。これに応じて、
cloneの設定や、有効桁数のprecisionだけで十分かどうかが決まります。 - インポート:「decimal.js」からのデフォルトまたは名前付きの
Decimal。
- パッケージ:
- バージョンが不明確な場合や、丸め、金額、三角関数、ライブラリの分離に関わる作業では、ドキュメントを更新します。source-map.mdから始めてください。
- 詳細は以下を参照してください。
- インストール、コンストラクター、不変性、値の型:setup-core.md。
- 算術演算、比較、書式設定、静的ヘルパー:arithmetic-api.md。
set/config/clone、丸めモード、剰余:config-rounding.md。- 金額、JSON/SSR/ストア間のデータ転送:money-serialization.md。
- 三角関数、乱数/暗号、light版とフル版の違い、MikeMclエコシステム:advanced-ecosystem.md。
- アンチパターンとアップグレード:pitfalls.md。
- プロジェクトのコンストラクタースタイル(
Decimalかドメイン別のclone)に合わせます。公開ライブラリ内では、グローバルなDecimal.setを呼び出さないでください。 - 型チェックに加え、文字列からの生成、丸めモード、
toDP/toFixed、シリアライズのラウンドトリップをテストして検証します。
ライブラリの選択フローチャート
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
基本的な判断基準
- 金額や複数桁の値は、文字列(またはBigInt/Decimal)から生成します。
new Decimal(0.1 + 0.2)のような使い方や、先にNumberで演算する方法は避けてください。 - インスタンスは不変です。メソッドをチェーンして使用し、インスタンスがその場で変更されることを想定しないでください。
precisionは、(ほぼすべての)算術演算結果の有効桁数です。通貨の小数点以下の桁数ではありません。固定の小数点以下桁数には、toDecimalPlaces/toDP(文字列の場合はtoFixed)を使用してください。- ライブラリや複数のドメインを扱うアプリでは、**
Decimal.clone({…})**を優先してください。アプリ全体の起動時設定に限り、Decimal.setを使用します。 - 値の等価性は、**
.eq/.cmp**で判定します。===/==は使用しないでください。 - シリアライズには文字列(
toJSON/toFixed/toString)を使用します。金額や永続化する値には、toNumber()を使用しないでください。 - デフォルトの丸めモードは**
ROUND_HALF_UP(4)**です。金融用途では、丸めモード(HALF_UP/HALF_EVEN/管轄地域の規則)を明示的に選択してください。 - 設定には**
set/config/clone**を使用します。Decimal.precision = …を直接代入しないでください(検証がスキップされます)。
検証
リポジトリで定められたコマンドを優先してください。該当する項目を確認します。
bun pm ls decimal.js(移行時はlight/big/bignumberも確認)。Decimal.Value、Decimal.Config、cloneコンストラクターの型チェック。- テスト:文字列と数値からの生成、
eqと===の違い、toDP/toFixedの丸めモード、端数の配分/税計算の境界ケース、JSONの復元(new Decimal(dto.amount))、必要に応じて符号付きゼロ。 - light版とフル版の選択時に限り、バンドルサイズを確認します。
実行したチェックと実行しなかったチェック、および未確定のバージョン/設定に関する前提を報告してください。
コメント
Markdown 対応