$toDecimal (Decimal128 への変換)
最終更新:2026-10-09
$toDecimal (Decimal128 への変換)
$toDecimal は値を Decimal128 に変換します。Decimal128 は、金額や精度が重要な演算向けの高精度 10 進型で、double の 2 進浮動小数点誤差を回避できます。数値、数値文字列、ブール値を受け付け、null は null のままです。代表的な用途は、注文金額の累積と比較です。double との混合演算は自動的に decimal へ昇格しますが、無効な文字列の変換はエラーになるため、$convert の onError でガードしてください。
| カテゴリ | 集合・条件・変換 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $toDecimal: <expression> }
⚙️ パラメータ
| 式 | 数値、数値文字列、またはブール値。 |
|---|
戻り値:Decimal128 値。入力が null の場合は null
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $toDecimal: 金額文字列を高精度で解析
db.orders.aggregate([
{ $project: {
amount: { $toDecimal: '$amountStr' }
} }
])
出力:
{ '_id': 1, 'amount': { '$numberDecimal': '199.90' } }
📌 注意事項
- 金額には double の精度誤差を避けるため decimal を優先する
- 無効な数値文字列(例: 'abc')はエラー
- null の入力は null を返す
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qなぜ金額に decimal を使うのですか?
Adouble には 2 進浮動小数点誤差があり、0.1 などが不正確に累積します。Decimal128 は正確です。
Qどの入力が変換されますか?
A数値、数値文字列、ブール値(true は 1)です。
Q文字列 'abc' は?
Aエラーになります。$convert の onError でガードしてください。