פייתון עשרוני – חלוקה, עיגול, דיוק

המודול העשרוני של Python עוזר לנו בחלוקה עם דיוק ועיגול נכונים של מספרים.

המודול העשרוני של Python

בשיעור זה על המודול העשרוני ב־Python, נראה כיצד ניתן לנהל מספרים עשרוניים בתוכניות שלנו לצורך דיוק, עיצוב וביצוע חישובים. הדיוק עם מספרים עשרוניים פשוט לאבד אם אין טיפול נכון במספרים. בואו נראה איך המודול העשרוני של Python והפונקציות הזמינות בו עוזרות בתחומים אלו.

עבודה עם מספרים עשרוניים

מספרים עשרוניים הם פשוט מספרים עשרוניים עם נקודה עשרונית קבועה. עלינו לעגל את המספרים בצורה נכונה לפי צורך, אחרת תוצאות יכולות להיות חד משמעיות. המודול העשרוני של Python עוזר לנו להיות מדויקים יותר עם מספרים עשרוניים.

צורך במודול עשרוני

לפני שנכניס בפועל לשימוש במודול הזה, בואו נראה על כמה דיוק אנו מדברים ונקבע למה בכלל אנו צריכים את המודול הזה. בואו נסתכל על קטע הקוד הבא:

division = 72 / 7
print(division)

בואו נראה את הפלט של תוכנית זו: ובכן, התשובה לא הייתה בדיוק ולא היו נקודות עשרוניות כלל! בואו נראה איך אנו יכולים לתקן זאת באמצעות שימוש במודול העשרוני.

שימוש במודול העשרוני

בכל התוכניות שנעשה בפוסט הזה, נייבא את מודול העשרוני בכל אחת מהן:

import decimal

יתכן כי נייבא רק פונקציה מסוימת מהמודול הזה. ניתן לעשות זאת כך:

from decimal import Decimal

בואו נתחיל להכניס את מודול העשרוני לתוך כמה תוכניות.

דוגמת מודול עשרוני בפייתון

נתחיל עם דוגמאות הקשורות למודול כעת.

תיקון חלוקה עם עשרוניים

כאן, נקון את התוכנית שכתבנו למעלה כדי לבצע חלוקה שצריך הייתה לייצר תוצאה בנקודה צפה. התוכנית ששונתה עם מודול העשרוניים תיראה כמו:

import decimal

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)

בואו נראה את הפלט של התוכנית הזו: שימו לב, החלוקה נכונה כעת ומדויקת גם, או אולי זה מדי מדויק?

שליטה בדיוק לפעולה יחידה

בתוכנית האחרונה, היו 25 מקומות עשרוניים בתשובה כעת. אך מה קורה אם רק רצינו עד שלושה מקומות של ערכים עשרוניים? זה ניתן לשלוט גם בזה. כאן, נשלוט בדיוק של התשובה שלא ישפיע על פעולות אחרות בתוכנית שלנו:

import decimal

with decimal.localcontext() as ctx:
    ctx.prec = 3
    division = decimal.Decimal(72) / decimal.Decimal(7)
    print(division)

again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)

עשינו את פעולת החלוקה פעמיים כדי להוכיח נקודה. בואו נראה את הפלט של התוכנית הזו: הבחנתם משהו? הדיוק שקבענו היה תקף רק פעם אחת. בפעם הבאה שעשינו את החלוקה, קיבלנו את אותה התוצאה שוב.

שליטה בדיוק לתוכנית מלאה

כמו כן, ניתן לשלוט בדיוק באופן גלובלי בתוכנית. זה לא מומלץ תמיד כאשר אתה מתמודד עם הרבה מספרים בתוכנית שלך. הנה דוגמה:

import decimal

decimal.getcontext().prec = 3

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)

again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)

בואו נראה את הפלט של התוכנית הזו:

עיגול המספרים

כמובן שאפשר לעגל באופן נאה את המספרים עם פונקציית round(...). בואו ננסה את זה:

import decimal

#ניתן לעגל ל־13.48 או 13.49
rounded = round(13.485, 2)
print(rounded)

בואו נראה את הפלט של התוכנית הזו: המספר בתוכנית יכול להיות מעגל ל־13.48 או 13.49. כברירת מחדל, פונקציית round(...) מעגלת למטה. זה ניתן לשנות גם כך:

import decimal

#ניתן לעגל ל־13.48 או 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))

בואו נראה את הפלט של התוכנית הזו:

לקבלת ההגדרות של תכונת ה-Decimal ב-Python

אם אתה מעוניין לראות את ההגדרות ברירת המחדל של תכונת ה-Decimal במודול Python, תוכל להשתמש בתסריט הבא:

from decimal import *
print(getcontext())

בואו נראה את הפלט של תוכנית זו: זהו כל מה שיש לנו על מודול ה-Decimal של Python, זה מאוד שימושי כאשר אנו עובדים עם מספרים עשרוניים.

Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision