تحويل النصوص إلى أرقام عشرية باستخدام دالة Decimal() في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

تحويل النصوص إلى أرقام عشرية باستخدام دالة Decimal() في Python

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

ما هو نوع البيانات Decimal في Python؟

نوع البيانات Decimal هو جزء من مكتبة decimal في Python، والتي توفر دعمًا للأرقام العشرية بدقة عالية. يُستخدم هذا النوع بشكل شائع في التطبيقات التي تتطلب دقة عالية في العمليات الحسابية، مثل التطبيقات المالية والمحاسبية.

مزايا استخدام Decimal

  • دقة عالية: يوفر Decimal دقة أعلى مقارنة بأنواع البيانات العشرية الأخرى مثل float.
  • تجنب أخطاء التقريب: يقلل من أخطاء التقريب التي قد تحدث عند استخدام float.
  • دعم العمليات الحسابية المعقدة: يتيح إجراء عمليات حسابية معقدة بدقة عالية.
  • تحكم أفضل في الترقيم: يوفر مرونة أكبر في التحكم بعدد الأرقام العشرية.

دالة Decimal() في Python

تُستخدم دالة Decimal() لتحويل النصوص أو الأعداد إلى كائنات من نوع Decimal. هذه الدالة تضمن أن الأرقام العشرية تُحافظ على دقتها عند إجراء العمليات الحسابية.

التركيب العام لدالة Decimal()

الدالة Decimal() تأخذ سلسلة نصية أو عددًا كمعامل وتعيد كائنًا من نوع Decimal. من المهم استيراد مكتبة decimal قبل استخدام الدالة.

كيفية استخدام Decimal() لتحويل النصوص إلى أرقام عشرية

لتحويل نصوص إلى أرقام عشرية باستخدام دالة Decimal()، يجب اتباع الخطوات التالية:

  1. استيراد مكتبة decimal.
  2. استخدام دالة Decimal() لتحويل النص إلى رقم عشري.

مثال بسيط على استخدام Decimal()

في هذا المثال، سنقوم بتحويل نص يحتوي على رقم عشري إلى كائن Decimal.

from decimal import Decimal

number_str = "123.456"

decimal_number = Decimal(number_str)

print(decimal_number)
print(type(decimal_number))

في هذا المثال:

  • قمنا باستيراد دالة Decimal() من مكتبة decimal.
  • أنشأنا سلسلة نصية تحتوي على رقم عشري.
  • استخدمنا دالة Decimal() لتحويل السلسلة النصية إلى كائن Decimal.
  • قمنا بطباعة الرقم العشري ونوعه.

الناتج سيكون:

    123.456
    <class 'decimal.Decimal'>
    

تحويل قائمة من النصوص إلى أرقام عشرية

يمكن أيضًا تحويل قائمة من النصوص إلى قائمة من أرقام Decimal باستخدام تعبيرات القائمة.

from decimal import Decimal

numbers_str = ["10.5", "20.75", "30.125"]

decimal_numbers = [Decimal(num) for num in numbers_str]

print(decimal_numbers)

الناتج سيكون:

    [Decimal('10.5'), Decimal('20.75'), Decimal('30.125')]
    

المعاملات الشائعة في Decimal()

توفر دالة Decimal() بعض المعاملات التي يمكن استخدامها لتخصيص عملية التحويل، مثل تحديد السياق (context) الذي يتحكم في الدقة والتقريب.

1. context

يحدد هذا المعامل سياق الدقة والتقريب الذي سيتم استخدامه عند إنشاء كائن Decimal. يمكن تعديل السياق لضبط الدقة حسب الحاجة.

2. invalid_operation

يحدد كيفية التعامل مع العمليات غير الصالحة مثل القسمة على صفر أو العمليات الحسابية التي تتجاوز الدقة المحددة.

أمثلة متقدمة على استخدام Decimal()

لنستعرض بعض الأمثلة المتقدمة التي توضح كيفية استخدام دالة Decimal() بطرق أكثر تعقيدًا.

التعامل مع دقة الأرقام العشرية

يمكنك تحديد دقة الأرقام العشرية باستخدام سياق decimal لتجنب أخطاء التقريب.

from decimal import Decimal, getcontext

getcontext().prec = 6

num1 = Decimal("1.23456789")
num2 = Decimal("2.34567891")

result = num1 + num2

print(result)

في هذا المثال:

  • قمنا باستيراد دالة Decimal() وسياق getcontext() من مكتبة decimal.
  • حددنا دقة الأرقام العشرية إلى 6 أرقام باستخدام getcontext().prec = 6.
  • أنشأنا كائنات Decimal بقيم عشرية كبيرة.
  • أجرينا عملية جمع بين الرقمين العشريين.
  • قمنا بطباعة الناتج.

الناتج سيكون:

    3.58025
    

التعامل مع الأعداد الكبيرة والصغيرة

يمكن لـ Decimal التعامل مع الأعداد الكبيرة والصغيرة بدقة عالية دون فقدان الدقة.

from decimal import Decimal

large_num = Decimal("123456789123456789.123456789")
small_num = Decimal("0.00000000123456789")

sum_num = large_num + small_num

print(sum_num)

الناتج سيكون:

    123456789123456789.123456790
    

استخدام معاملات إضافية لتحسين التحكم

يمكنك استخدام معاملات إضافية مثل context لتحديد قواعد التقريب والدقة بشكل أكثر تحديدًا.

from decimal import Decimal, getcontext, ROUND_HALF_UP

getcontext().prec = 4
getcontext().rounding = ROUND_HALF_UP

num = Decimal("2.675")
rounded_num = num.quantize(Decimal("0.01"))

print(rounded_num)

في هذا المثال:

  • قمنا بتحديد دقة الأرقام العشرية إلى 4 باستخدام getcontext().prec = 4.
  • حددنا طريقة التقريب إلى ROUND_HALF_UP.
  • أنشأنا كائن Decimal بقيمة "2.675".
  • استخدمنا دالة quantize() لتقريب الرقم إلى منزلتين عشريتين.
  • قمنا بطباعة الرقم المقرب.

الناتج سيكون:

    2.68
    

التعامل مع الأخطاء عند استخدام Decimal()

على الرغم من فوائد استخدام Decimal، إلا أنه قد تواجه بعض الأخطاء عند التعامل مع البيانات غير الصحيحة أو المحاولات غير الصالحة للتحويل. من المهم التعامل مع هذه الأخطاء باستخدام كتل try-except.

مثال على التعامل مع الأخطاء

from decimal import Decimal, InvalidOperation

number_str = "123.45.67"

try:
  decimal_number = Decimal(number_str)
  print(decimal_number)
except InvalidOperation as e:
  print("خطأ في تحويل النص إلى Decimal:", e)

في هذا المثال:

  • قمنا بمحاولة تحويل نص يحتوي على رقم عشري غير صحيح إلى Decimal.
  • استخدمنا كتلة try-except لالتقاط ومعالجة الخطأ الناتج.

الناتج سيكون:

    خطأ في تحويل النص إلى Decimal: []
    

مقارنة بين Decimal و float في Python

من المهم فهم الفروقات بين نوع البيانات Decimal وfloat في Python لاختيار النوع المناسب حسب الحاجة.

الدقة

float يستخدم تمثيلًا عشريًا بنقطة عائمة والذي قد يؤدي إلى أخطاء تقريبية في العمليات الحسابية. في المقابل، Decimal يوفر دقة عالية ويجنب هذه الأخطاء.

الأداء

عمليات float أسرع مقارنةً بـ Decimal نظرًا لبنيته البسيطة. ومع ذلك، فإن دقة Decimal قد تكون ضرورية في بعض التطبيقات رغم تأثيرها على الأداء.

الاستخدام الأمثل

يُفضل استخدام float في التطبيقات التي تتطلب سرعة عالية ولا تحتاج إلى دقة دقيقة. أما Decimal فيُفضل استخدامه في التطبيقات المالية والمحاسبية التي تتطلب دقة عالية في الحسابات.

مثال على الفروقات بين Decimal و float

from decimal import Decimal

float_num = 0.1 + 0.2
decimal_num = Decimal("0.1") + Decimal("0.2")

print(float_num)
print(decimal_num)

الناتج سيكون:

    0.30000000000000004
    0.3
    

أفضل الممارسات عند استخدام Decimal()

لضمان استخدام فعال وآمن لدالة Decimal()، يُنصح باتباع بعض أفضل الممارسات:

  • استخدام السلاسل النصية عند إنشاء كائنات Decimal: لتجنب أخطاء التقريب التي قد تحدث عند تحويل الأعداد العشرية مباشرة.
  • تحديد السياق المناسب: لضبط الدقة والتقريب بما يتناسب مع متطلبات التطبيق.
  • معالجة الأخطاء بفعالية: استخدام كتل try-except للتعامل مع المحاولات غير الصالحة للتحويل.
  • تجنب تحويل الكائنات غير المدعومة: مثل الدوال أو الفئات، والتي لا يمكن تحويلها إلى Decimal.
  • استخدام Decimal في جميع العمليات الحسابية: لضمان الحفاظ على الدقة وعدم الانتقال بين أنواع البيانات المختلفة.

مثال على استخدام Decimal في العمليات الحسابية

from decimal import Decimal, getcontext

getcontext().prec = 5

price = Decimal("19.99")
quantity = Decimal("3")

total = price * quantity

print(total)

في هذا المثال:

  • قمنا بتحديد دقة الأرقام العشرية إلى 5 أرقام.
  • أنشأنا كائنات Decimal للأسعار والكمية.
  • أجرينا عملية ضرب بين السعر والكمية لحساب الإجمالي.
  • قمنا بطباعة الإجمالي بدقة عالية.

الناتج سيكون:

    59.97
    

الخلاصة

يُعد تحويل النصوص إلى أرقام عشرية باستخدام دالة Decimal() في Python خطوة حيوية لضمان دقة الحسابات في التطبيقات التي تتطلب ذلك، مثل التطبيقات المالية والمحاسبية. من خلال فهم كيفية استخدام دالة Decimal() والمعاملات المتاحة لها، يمكنك تحسين عمليات البرمجة الخاصة بك وجعلها أكثر دقة وموثوقية. سواء كنت تقوم بتحليل بيانات مالية، تطوير تطبيقات علمية، أو أي مشروع برمجي آخر يتطلب دقة عالية في التعامل مع الأرقام العشرية، فإن إتقان استخدام Decimal في Python يعد مهارة قيمة تساعدك على إدارة البيانات بشكل أفضل وتطوير تطبيقات أكثر قوة وفاعلية.

طور مهاراتك: مقالات يجب قراءتها في البرمجة