Python وظيفة round() مع أمثلة
مستدير()
Round() هي وظيفة مضمنة متاحة مع بايثون. سيعيد لك رقمًا عائمًا سيتم تقريبه إلى المنازل العشرية التي يتم تقديمها كمدخل.
إذا لم يتم تحديد الأماكن العشرية التي سيتم تقريبها، فسيتم اعتبارها 0، وسيتم التقريب إلى أقرب عدد صحيح.
بناء الجملة
round(float_num, num_of_decimals)
المعاملات
- float_num: الرقم العائم الذي سيتم تقريبه.
- num_of_decimals: (اختياري) عدد الأعداد العشرية التي يجب أخذها في الاعتبار أثناء التقريب. وهو اختياري، وإذا لم يتم تحديده، فإنه يصبح افتراضيًا 0، ويتم التقريب إلى أقرب عدد صحيح.
الوصف
تأخذ الطريقة round() وسيطتين
- الرقم المراد تقريبه و
- المنازل العشرية التي يجب مراعاتها أثناء التقريب.
الحجة الثانية اختيارية ويتم تعيينها افتراضيًا إلى 0 عندما لا يتم تحديدها، وفي هذه الحالة، سيتم التقريب إلى أقرب عدد صحيح، وسيكون نوع الإرجاع أيضًا عددًا صحيحًا.
عند وجود المنازل العشرية، أي الوسيطة الثانية، سيتم تقريبها إلى عدد المنازل المعطاة. سيكون نوع الإرجاع عائمًا.
إذا كان الرقم بعد العلامة العشرية المعطاة
- سيتم إضافة >=5 من +1 إلى القيمة النهائية
- <5 من القيمة النهائية سيتم إرجاعها لأنها تصل إلى المنازل العشرية المذكورة.
قيمة الإرجاع
سيتم إرجاع قيمة عددية إذا لم يتم إعطاء num_of_decimals وقيمة عائمة إذا تم إعطاء num_of_decimals. يرجى ملاحظة أنه سيتم تقريب القيمة إلى +1 إذا كانت القيمة بعد العلامة العشرية >=5 وإلا فسيتم إرجاع القيمة كما هي حتى المنازل العشرية المذكورة.
ما مدى التأثير الذي يمكن أن يحدثه التقريب؟ (التقريب مقابل الاقتطاع)
وأفضل مثال لتوضيح تأثير التقريب هو سوق الأوراق المالية. في الماضي أي في عام 1982، بورصة فانكوفر (VSE): يستخدم لاقتطاع قيم الأسهم إلى ثلاث منازل عشرية في كل صفقة.
تم القيام بذلك ما يقرب من 3000 مرة كل يوم. تؤدي عمليات الاقتطاع المتراكمة إلى خسارة حوالي 25 نقطة شهريًا.
يظهر أدناه مثال لاقتطاع القيم مقابل التقريب.
اعتبر الأرقام العائمة التي تم إنشاؤها أدناه بمثابة قيم أسهم. في الوقت الحالي، أقوم بإنشائها لمجموعة من
1,000,000 ثانية بين 0.01 و0.05.
أمثلة:
arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
لإظهار تأثير التقريب، لقد كتبت جزءًا صغيرًا من التعليمات البرمجية حيث تحتاج في البداية إلى استخدام الأرقام حتى 3 منازل عشرية فقط، أي اقتطاع الرقم بعد 3 منازل عشرية.
لدي القيمة الإجمالية الأصلية، والإجمالي القادم من القيم المقتطعة والفرق بين القيمة الأصلية والقيمة المقتطعة.
على نفس مجموعة الأرقام، كنت أستخدم طريقة round() حتى 3 منازل عشرية وأحسب المجموع والفرق بين القيمة الأصلية والقيمة المستديرة.
هنا المثال والإخراج
مثال 1
import random
def truncate(num):
return int(num * 1000) / 1000
arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
sum_num = 0
sum_truncate = 0
for i in arr:
sum_num = sum_num + i
sum_truncate = truncate(sum_truncate + i)
print("Testing by using truncating upto 3 decimal places")
print("The original sum is = ", sum_num)
print("The total using truncate = ", sum_truncate)
print("The difference from original - truncate = ", sum_num - sum_truncate)
print("\n\n")
print("Testing by using round() upto 3 decimal places")
sum_num1 = 0
sum_truncate1 = 0
for i in arr:
sum_num1 = sum_num1 + i
sum_truncate1 = round(sum_truncate1 + i, 3)
print("The original sum is =", sum_num1)
print("The total using round = ", sum_truncate1)
print("The difference from original - round =", sum_num1 - sum_truncate1)
الإخراج:
Testing by using truncating upto 3 decimal places The original sum is = 29985.958619386867 The total using truncate = 29486.057 The difference from original - truncate = 499.9016193868665 Testing by using round() up to 3 decimal places The original sum is = 29985.958619386867 The total using round = 29985.912 The difference from original - round = 0.04661938686695066
الفرق بين الأصلي وبعد الاقتطاع هو 499.9016193868665 ومن الدائري هو 0.04661938686695066
يبدو أن الفرق كبير جدًا، ويوضح المثال كيفية استخدام طريقة التقريب () في الحساب بالقرب من الدقة.
مثال: تقريب التعويم Numbers
في هذا البرنامج سنرى كيفية تقريب الكلمات على الأعداد العائمة
# testing round()
float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5
float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5
float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5
float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5
print("The rounded value without num_of_decimals is :", round(float_num1))
print("The rounded value without num_of_decimals is :", round(float_num2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))
الإخراج:
The rounded value without num_of_decimals is : 11 The rounded value without num_of_decimals is : 10 The rounded value with num_of_decimals as 2 is : 10.35 The rounded value with num_of_decimals as 2 is : 10.34
مثال: تقريب القيم الصحيحة
إذا كنت تستخدم round() على قيمة عددية، فسوف يعيد لك الرقم مرة أخرى دون أي تغييرات.
# testing round() on a integer
num = 15
print("The output is", round(num))
الإخراج:
The output is 15
مثال: التقريب إلى السالب Numbers
دعونا نرى بعض الأمثلة حول كيفية عمل التقريب على الأرقام السالبة
# testing round()
num = -2.8
num1 = -1.5
print("The value after rounding is", round(num))
print("The value after rounding is", round(num1))
الإخراج:
C:\pythontest>python testround.py The value after rounding is -3 The value after rounding is -2
مثال: صفائف Numpy الدائرية
كيفية تقريب numpy المصفوفات في بيثون?
لحل هذه المشكلة، يمكننا الاستفادة من الوحدة numpy واستخدام طريقة numpy.round() أو numpy.around()، كما هو موضح في المثال أدناه.
باستخدام numpy.round()
# testing round() import numpy as np arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323] arr1 = np.round(arr, 2) print(arr1)
الإخراج:
C:\pythontest>python testround.py [-0.34 1.46 4.23 -0.34 7.63 5.12]
يمكننا أيضًا استخدام numpy.around()، والذي يمنحك نفس النتيجة كما هو موضح في المثال أدناه.
مثال: الوحدة العشرية
بالإضافة إلى وظيفة round()، يحتوي Python على وحدة عشرية تساعد في التعامل مع الأرقام العشرية بشكل أكثر دقة.
تأتي الوحدة العشرية مع أنواع التقريب، كما هو موضح أدناه:
- ROUND_CEILING: سوف يدور نحو اللانهاية،
- ROUND_DOWN: سيتم تقريب القيمة نحو الصفر،
- ROUND_FLOOR: سوف يدور باتجاه -Infinity،
- ROUND_HALF_DOWN: سيتم التقريب إلى أقرب قيمة متجهًا نحو الصفر،
- ROUND_HALF_EVEN: سيتم التقريب إلى الأقرب مع انتقال القيمة إلى أقرب عدد صحيح زوجي،
- ROUND_HALF_UP: سيتم التقريب إلى الأقرب مع ابتعاد القيمة عن الصفر
- ROUND_UP: سيتم تقريبه حيث ستبتعد القيمة عن الصفر.
في النظام العشري، تساعد طريقة quantize() على التقريب إلى عدد ثابت من المنازل العشرية، ويمكنك تحديد التقريب المطلوب استخدامه، كما هو موضح في المثال أدناه.
على سبيل المثال:
باستخدام الطرق المستديرة () والعشرية
import decimal
round_num = 15.456
final_val = round(round_num, 2)
#Using decimal module
final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING)
final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN)
final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR)
final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN)
final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN)
final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP)
final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP)
print("Using round()", final_val)
print("Using Decimal - ROUND_CEILING ",final_val1)
print("Using Decimal - ROUND_DOWN ",final_val2)
print("Using Decimal - ROUND_FLOOR ",final_val3)
print("Using Decimal - ROUND_HALF_DOWN ",final_val4)
print("Using Decimal - ROUND_HALF_EVEN ",final_val5)
print("Using Decimal - ROUND_HALF_UP ",final_val6)
print("Using Decimal - ROUND_UP ",final_val7)
الإخراج:
Using round() 15.46 Using Decimal - ROUND_CEILING 15.46 Using Decimal - ROUND_DOWN 15.45 Using Decimal - ROUND_FLOOR 15.45 Using Decimal - ROUND_HALF_DOWN 15.46 Using Decimal - ROUND_HALF_EVEN 15.46 Using Decimal - ROUND_HALF_UP 15.46 Using Decimal - ROUND_UP 15.46
ملخص
- Round(float_num, Num_of_decimals) هي وظيفة مضمنة متاحة مع بايثون. سيعيد لك الرقم العائم الذي سيتم تقريبه إلى المنازل العشرية التي يتم تقديمها كمدخل.
- float_num: الرقم العائم الذي سيتم تقريبه.
- Num_of_decimals: هو عدد الكسور العشرية التي يجب مراعاتها أثناء التقريب.
- سيتم إرجاع قيمة عددية إذا لم يتم إعطاء num_of_decimals وقيمة عائمة إذا تم إعطاء num_of_decimals.
