Decimal128 (高精度小数)
最終更新:2026-10-09
Decimal128 (高精度小数)
Decimal128 は MongoDB の高精度小数型で、IEEE 754-2008 の十進浮動小数点標準に基づき、34桁の有効十進数字を持ちます。金額、レート、厳密な演算が必要なデータに適し、Double の二進丸め誤差を避けます。`Decimal128('19.99')` または mongosh 5.0+ の短縮形 `NumberDecimal('19.99')` で構築します。
| カテゴリ | BSON 型 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
Decimal128("<decimal string>")
NumberDecimal("<decimal string>") // mongosh 5.0+
{ price: Decimal128("19.99") }
戻り値:Decimal128 の BSON 値を返します
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// Decimal128: 構築して完全一致で検索する
use shop
db.prices.insertOne({ item: 'apple', price: Decimal128('19.99') })
db.prices.find({ price: { $eq: Decimal128('19.99') } })
出力:
{ _id: ObjectId('...'), item: 'apple', price: Decimal128('19.99') }
📌 注意事項
- 34桁の有効十進数字。Double よりはるかに精密
- 金額演算には必ず Decimal128 を使い、累積丸め誤差を避ける
- Decimal128 と Double は別の型。両者の $eq は false
- アグリゲーションでは $toString で出力時に文字列へ変換する
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QDecimal128 と Double の違いは?
ADouble は二進浮動小数点で 0.1 が正確でありません。Decimal128 は十進数字(有効34桁)を格納し、正確な金額計算ができます。
QDecimal128 はどのくらい大きな値を保持できますか?
A指数範囲はおよそ ±6143、値範囲はおよそ ±9.99×10^6144 で、ビジネス上のあらゆるニーズを超えます。
Qなぜ価格を Decimal128 で格納するのですか?
A金額には正確な十進演算が必要です。Double の合計はずれます(例: 0.30000000000000004)。照合が壊れます。