Decimal128 (عشري عالي الدقة)
آخر تحديث: 2026-10-09
Decimal128 (عشري عالي الدقة)
Decimal128 هو نوع العشري عالي الدقة في MongoDB، المبني على معيار النقطة العائمة العشرية IEEE 754-2008، مع 34 رقمًا عشريًا معنويًا. يناسب المال والأسعار وأي بيانات تحتاج حسابًا دقيقًا، متجنبًا أخطاء التقريب الثنائي في Double. يُنشأ بـ `Decimal128('19.99')` أو الاختصار `NumberDecimal('19.99')` المتاح في mongosh 5.0+.
| الفئة | أنواع BSON |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
Decimal128("<decimal string>")
NumberDecimal("<decimal string>") // mongosh 5.0+
{ price: Decimal128("19.99") }
القيمة المرجعة:يُرجع قيمة BSON من نوع Decimal128
▶ مثال
نفّذ الأوامر التالية في 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 للإخراج
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
الوثائق وBSON: حجر الأساس لبيانات MongoDB
إدراج المستندات: شرح مفصل لوظيفتي `insertOne` و`insertMany`
نماذج مونغوس وتصميم المخطط
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين Decimal128 و Double؟
ADouble نقطة عائمة ثنائية حيث 0.1 غير دقيق؛ بينما يخزّن Decimal128 أرقامًا عشرية (34 رقمًا معنويًا) لحسابات مال دقيقة.
Qما أكبر قيمة يمكن أن يحملها Decimal128؟
Aمدى الأس تقريبًا ±6143، ومدى القيمة تقريبًا ±9.99×10^6144 — أبعد من أي حاجة تجارية.
Qلماذا أخزّن الأسعار كنوع Decimal128؟
Aالمال يحتاج حسابًا عشريًا دقيقًا؛ مجاميع Double تنحرف (مثل 0.30000000000000004) وتكسر المطابقة.