1. المقدمة
Python هي لغة برمجة تُستخدم على نطاق واسع في مجالات متعددة مثل تحليل البيانات وتعلم الآلة. من بين العمليات الشائعة في البرامج اليومية هي “التقريب العددي”. على سبيل المثال، قد تكون هناك حاجة لتقريب الأرقام إلى عدد معين من المنازل العشرية أو إلى أقرب عدد صحيح.
في هذه المقالة، سنشرح بالتفصيل الطرق المختلفة للتقريب في Python. بدءًا من الدالة المدمجة round()
وصولاً إلى وحدة Decimal
التي توفر معالجة أكثر دقة، سنستعرض الطرق المناسبة للتقريب حسب الحاجة.
من خلال هذا الدليل، ستتعلم مهارات تساعدك على تحسين دقة معالجة الأرقام وزيادة موثوقية الكود.
2. ما هو التقريب في Python؟
التقريب في Python هو عملية تحويل رقم إلى أقرب عدد صحيح أو إلى قيمة بعدد معين من المنازل العشرية. هذه العملية مهمة جدًا في معالجة البيانات والحسابات العددية. على سبيل المثال، في البيانات المالية أو الحسابات الفيزيائية التي تتطلب دقة عالية، يمكن أن يؤثر أسلوب التقريب بشكل كبير على النتائج.
في Python، يمكن استخدام الدالة المدمجة round()
بسهولة لإجراء التقريب، لكن لهذه الدالة بعض القيود. خصوصًا عند التعامل مع الأعداد العشرية العائمة، حيث يجب الانتباه لمشاكل الدقة. للحصول على نتائج أكثر دقة، يُوصى باستخدام وحدة Decimal
.
في القسم التالي، سنركز على دالة round()
ونستعرض الطرق الأساسية للتقريب.

3. الاستخدام الأساسي لدالة round()
الطريقة الأساسية لاستخدام round()
دالة round()
هي إحدى الدوال المدمجة في Python وتُستخدم لتقريب الأرقام. الاستخدام الأساسي كالتالي:
print(round(1.5)) # الناتج: 2
print(round(2.5)) # الناتج: 2
في هذا المثال، يتم تقريب 1.5 إلى 2 وكذلك 2.5 إلى 2. تعتمد دالة round()
في Python على أسلوب يسمى “التقريب إلى الأقرب زوجي” أو ما يعرف بـ “Banker’s Rounding”. أي إذا كان الكسر 0.5، يتم التقريب إلى أقرب عدد زوجي.
التقريب مع تحديد عدد المنازل العشرية
يمكنك استخدام الوسيط الثاني في round()
لتحديد عدد المنازل العشرية:
print(round(1.456, 2)) # الناتج: 1.46
في هذا المثال، يتم تقريب الرقم عند المنزلة العشرية الثالثة ليُعرض حتى المنزلة الثانية.
ملاحظات حول round()
رغم بساطتها، لدالة round()
بعض الملاحظات. فقد تحتوي الأعداد العشرية العائمة على أخطاء تمثيل داخل الحاسوب، مثل الأعداد 0.1 أو 0.2، مما قد يؤدي إلى نتائج غير متوقعة. في هذه الحالات، يُفضل استخدام وحدة Decimal
للحصول على دقة أعلى.
في القسم التالي، سنتناول وحدة Decimal
بمزيد من التفصيل.
4. التقريب الدقيق باستخدام وحدة Decimal
ما هي وحدة Decimal؟
وحدة Decimal
في Python صُممت لحل مشاكل الدقة في الأعداد العشرية العائمة (float
). تُستخدم بشكل خاص في البيانات المالية أو الحسابات العلمية الدقيقة حيث لا يُسمح بالأخطاء. توفر Decimal
عمليات حسابية عشرية دقيقة وتجنب أخطاء التمثيل الشائعة.
على سبيل المثال، باستخدام float
قد تواجه المشكلة التالية:
print(0.1 + 0.2) # الناتج: 0.30000000000000004
لكن مع Decimal
، يمكنك الحصول على نتيجة دقيقة:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # الناتج: 0.3
إنشاء كائن Decimal
لإنشاء كائن Decimal
، يجب تمرير الرقم كسلسلة نصية، مما يُلغي خطأ التمثيل العشري:
from decimal import Decimal
d = Decimal('1.456')
print(d) # الناتج: 1.456
التقريب باستخدام quantize()
تُستخدم طريقة quantize()
مع كائن Decimal
لتقريب الأرقام لعدد معين من المنازل العشرية مع تحديد نمط التقريب. النمط الأكثر شيوعًا هو ROUND_HALF_UP
(التقريب لأعلى عند 0.5).
from decimal import Decimal, ROUND_HALF_UP
d = Decimal('1.456')
rounded = d.quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
print(rounded) # الناتج: 1.46
مميزات واستخدامات وحدة Decimal
تُعد وحدة Decimal
مثالية في العمليات المالية أو البيانات التي تتطلب دقة عالية. ففي مجال الماليات، حتى خطأ أقل من 1 سنت قد يسبب مشاكل كبيرة. وكذلك في التحليلات العلمية حيث يجب تقليل الخطأ العددي إلى الحد الأدنى.
5. التعرف على math.floor()
و math.ceil()
استخدام math.floor()
تعيد دالة math.floor()
أكبر عدد صحيح أقل من أو يساوي الرقم المُدخل، أي أنها “تقطع” المنازل العشرية.
import math
print(math.floor(3.9)) # الناتج: 3
استخدام math.ceil()
تعيد دالة math.ceil()
أصغر عدد صحيح أكبر من أو يساوي الرقم المُدخل، أي أنها “تقرّب للأعلى”.
import math
print(math.ceil(3.1)) # الناتج: 4
متى نستخدم floor()
و ceil()
؟
تُستخدم بشكل شائع في الإحصاء أو تطوير الألعاب حيث يُطلب دائمًا التقريب لأسفل أو لأعلى. على سبيل المثال: أنظمة النقاط أو تسجيل النتائج.
6. أمثلة متقدمة باستخدام الدمج
يمكنك دمج round()
مع Decimal
و floor()
و ceil()
للحصول على معالجة أكثر مرونة للأرقام.
إنشاء دالة مخصصة
مثال: تقريب رقم ثم تقريبه دائمًا للأعلى باستخدام ceil()
.
import math
def custom_round(value, digits):
rounded_value = round(value, digits)
return math.ceil(rounded_value)
print(custom_round(1.456, 2)) # الناتج: 2

7. الأسئلة الشائعة (FAQ)
1. متى أستخدم دالة round()
؟
تُعد round()
الطريقة الأبسط لتقريب الأرقام في Python. لكنها تعتمد على أسلوب “Banker’s Rounding”، أي التقريب إلى العدد الزوجي عند وجود 0.5.
print(round(1.456, 2)) # الناتج: 1.46
2. متى يكون استخدام Decimal
أفضل؟
عند الحاجة لدقة عالية جدًا مثل العمليات المالية أو العلمية. باستخدام Decimal
يمكن تجنب الأخطاء التي قد تنتج عن float
.
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # الناتج: 0.3
3. ماذا أفعل إذا كان التقريب غير متوقع؟
أولاً افحص ما إذا كان السبب هو أسلوب round()
. إذا أردت نتائج أكثر دقة، يمكنك استخدام Decimal
مع ROUND_HALF_UP
.
from decimal import Decimal, ROUND_HALF_UP
d = Decimal('1.25')
print(d.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)) # الناتج: 1.3
8. الخلاصة
استعرضنا في هذا المقال طرقًا متعددة للتقريب في Python. دالة round()
سهلة وسريعة لكنها محدودة. عند الحاجة لدقة أعلى، من الأفضل استخدام وحدة Decimal
. أما math.floor()
و math.ceil()
فهي بدائل مفيدة في الحالات الخاصة.
اختر الطريقة المناسبة حسب احتياجاتك لتحقيق دقة أكبر وموثوقية أعلى في معالجة الأرقام ببايثون.
9. مقالات وموارد ذات صلة
لتوسيع معرفتك حول التقريب في Python، يمكنك الرجوع إلى المصادر التالية:
- التوثيق الرسمي لـ Python – دالة
round()
شرح تفصيلي عن الاستخدام والتحذيرات، بما في ذلك “Banker’s Rounding”.
Python Official Documentation - التوثيق الرسمي لـ Python – وحدة
decimal
شرح متعمق عن وحدةdecimal
وكيفية التعامل مع الدقة العالية.
Python Decimal Documentation - مقال تفصيلي حول التقريب – note.nkmk.me
مقال يشرح بالتفصيل طرق التقريب مع أمثلة عملية باستخدامround()
وdecimal
.
طريقة التقريب في Python للأعداد العشرية والصحيحة