اذهب إلى المحتوى

السؤال

نشر

لدي متجر صغير مبني بإستخدام جانغو Django، ولدي فضول أي نوع من الحقول سيكون أفضل كحقل لتخزين العملات Currency؟

سأقوم بعمليات بسيطة على أسعار المنتجات مثل حساب الخصم discount. وأخطط للاحتفاظ برقمين بعد الصفر (مثل 15.99$) وأغلبية الوقت إذا كانت هذه الأرقام العشرية صفرًا، فسأخفي هذه الأرقام وأعرضها على أنها "15" فقط بدون كتابة أي شيء بجانب العلامة العشرية.

هل أستعمل DecimalField أم FloatField وما الفرق بينهما؟

Recommended Posts

  • 1
نشر

بالرغم من أن النوعين يمثلان الأعداد الحقيقية إلا أنهما يقومان بتمثيلهما بشكل مُختلف فالنوع FloatField يستعمل float من بايثون، بينما يستخدم DecimalField النوع Decimal.

أهم الفروق بينهما:

  • DecimalField:
    • يجب تعيين الخاصية decimal_places والخاصية max_digits عند إنشاء الحقل.
    • جانغو يقوم بإثارة خطأ في حالة ما إذا كان عدد الأرقام أكبر  من قيمة max_digits. مثلاً إذا كان max_digits=5 فإن الأعداد يجب أن تكون أقل من  999.99.
    • جانغو كذلك يقوم بإثارة خطأ في حالة ما إذا كان عدد الأرقام وراء الفاصلة أكبر من قيمة decimal_places. مثلاً إذا كان decimal_places= 1 فأصغر قيمة سوف تكون وراء الفاصلة هي 0.1.
    • إذا قمنا بطباعة نوع القيمة الموجودة داخل الحقل، فإن المخرج سوف يكون decimal.Decimal.
    • في قاعدة البيانات postgresql يُحفظ على الشكل numeric(max_digits, decimal_places).
  • FloatField:
    • إذا قمنا بطباعة نوع القيمة الموجودة داخل الحقل، فإن المخرج سوف يكون float.
    • لا يحتوي على دوال تحقق مثل الموجود في DecimalField.
    • في قاعدة البيانات postgresql يُحفظ على الشكل double precision.
    • لايوجد به تقريب ذكي. 

بعد عرض الفرق بين الحقلين يأتي السؤال الآن ماذا أستعمل: 

  1.  عندما يتعلق الأمر بالأسعار فيُنصح دائما باستخدام نوع الحقل DecimalField.
  2. يُمكن أيضاً استخدام تطبيق django-money فهو يقوم بإضافة حقل جديد MoneyField خاص بحفظ الأسعار بمختلف العملات.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...