Як округлити числа в Python [With Examples]

Працюєте з числовими типами даних у Python? Переходьте на новий рівень, вивчаючи різні способи округлення чисел у Python.

Більшість реальних наборів даних містить як числові, так і категориальні характеристики. Існує широкий набір числових функцій, від показань датчиків до курсів валют, біомедичних сигналів тощо.

Під час роботи з числовими значеннями вам може знадобитися округлити ці значення до фіксованої точності з таких причин, як:

  • Забезпечення узгодженого формату
  • Простіше зберігання та обробка

У цьому підручнику ми дізнаємося про різні способи округлення числа до певної точності, округлення чисел у більшу та меншу сторону до найближчого цілого числа та багато іншого.

Давайте розпочнемо.

Як округлити числа за допомогою вбудованої функції round().

Найпоширенішим методом округлення чисел у Python є використання вбудованого функція round().. Давайте почнемо з вивчення його синтаксису:

round(num, ndigits)

тут,

  • num — це число, яке потрібно округлити
  • ndigits є необов’язковим параметром із значенням за замовчуванням None. Це кількість розрядів, до якої потрібно округлити число. Якщо ndigits = 2, число округлюється до двох знаків після коми.
  • Функція round() повертає число, округлене до nцифри з точністю після коми.

Приклади використання функції round() Python

Давайте напишемо кілька прикладів, щоб зрозуміти, як працює функція round().

Як згадувалося, ndigits є необов’язковим. Отже, коли ми викликаємо round() лише з числом, число округлюється до найближчого цілого.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

Тепер давайте візьмемо кілька прикладів, де ми визначаємо точність.

Якщо ndigits встановлено на 2, число округлюється до двох знаків після коми (десяте місце):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

Якщо ndigits встановлено на 3, число округлюється до трьох знаків після коми (сотий знак):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

Ви також можете використовувати round() для округлення від’ємних чисел:

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

Тут функція округлює -3,4 до -3, найближчого цілого числа.

  9 інструментів Open Source Intelligence (OSINT) для тестування на проникнення

Округлення до розряду десятків і сотень

Чи знаєте ви, що ndigits також можуть приймати від’ємні значення?

Так, ви можете викликати функцію round() із від’ємними значеннями для ndigits. Коли ви це зробите, округлення відбувається зліва від коми, а не справа.

Що це значить? Давайте розглянемо кілька прикладів.

Коли ми встановлюємо ndigits на -1, число округлюється до найближчого розряду десятків.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

І виклик функції round() із ndigits, встановленим на -2, округлює число 77,123456 до найближчої сотні, що в цьому випадку дорівнює 100,0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Поки що функція round(), здається, дотримується загальних принципів округлення, які ми вивчили в шкільній математиці. Але це не завжди так.

Є деякі обмеження з плаваючою комою чисел. Тому ви можете побачити деякі несподівані результати під час округлення. Ще одне цікаве застереження – округлення банкіра.

Що таке банківське округлення?

Запустіть Python REPL і спробуйте такий приклад:

>>> round(1.5)
2

Ми бачимо, що round(1.5) повертає 2 (як і очікувалося). Отже, що повинен повертати round(2.5)?

>>> round(2.5)
2

Цікаво, так? І round(1.5), і round(2.5) повертають 2. Але як і чому?

Внутрішня функція округлення працює так: будь-яке значення, яке знаходиться посередині між двома цілими числами, округлюється до найближчого парного цілого числа. Це називається банкірське округлення або стратегія від раунду до пари.

Ми знаємо, що функції round() достатньо для простих завдань округлення. Але іноді вам може знадобитися округлити число в більшу або меншу сторону до найближчого цілого числа.

Отже, як ви це робите? Давайте дізнаємося про це в наступному розділі.

Як округлити числа в Python

Щоб округлити число до найближчого цілого, ви можете скористатися:

Використання math.ceil

Функція ceil() (або функція стелі) працює так: вона округлює число до найменшого цілого числа, більшого за число.

У наступному фрагменті показано, як використовувати функцію ceil() для округлення числа 3,2:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Використання десяткового модуля

Поки що ми використовували вбудований тип даних float. Але для певних застосувань у наукових обчисленнях і фінансах нам потрібна набагато вища точність. І для цього Python постачається з десятковим модулем, який забезпечує:

  • Більш точна арифметика з плаваючою комою
  • Надійне тестування рівності
  • Більш точний контроль над рівнем точності (за замовчуванням точність становить 28 знаків)
  Як видалити портфоліо в Yahoo Finance

Щоб побачити поточний контекст, використовуйте getcontext(), як показано:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Ви повинні мати змогу побачити поточний режим точності та округлення, серед іншого:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Щоб округлити число, ви можете використати quantize(), вказавши:

  • Точність (0,0, оскільки ми хочемо округлити до найближчого цілого числа) і
  • Режим округлення: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Тут число 3,2 округлено до найближчого цілого числа 4.

Як округляти числа в Python

Тепер давайте подивимося, як округляти числа в Python. Подібно до процесу округлення, ми можемо використовувати або математичні, або десяткові модулі.

Використання math.floor

Функція floor() із математичного модуля працює так: вона округлює число до найбільшого цілого числа, яке є меншим за число.

Візьмемо такий приклад:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

Тут функція floor() округляє число з плаваючою комою 3,8 до 3.

Використання десяткового модуля

Щоб округлити число, ви можете скористатися quantize(), встановивши режим округлення на ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Як видно, 3,8 було округлено до 3.

Поширені підводні камені, яких слід уникати під час округлення чисел

Ми вже бачили, що функція round() округлює половину до навіть, що не завжди бажано. Є деякі інші поширені підводні камені, яких слід уникати під час округлення чисел у Python:

  • Некоректне порівняння рівності: округлення чисел часто призводить до помилок округлення. Якщо ви спробуєте виконати порівняння рівності між округленим результатом з іншим значенням, перевірка рівності (майже завжди) завершиться невдачею через різну точність. Тому намагайтеся уникати перевірки рівності між числами з плаваючою комою та округленими числами з плаваючою комою. Якщо порівняння є необхідним, то вводять поріг допуску.
  • Втрата інформації. Ви можете захотіти, щоб певні дані, як-от показання датчиків у різних часових мітках, були збережені з високою точністю. Округлення таких даних до меншої кількості знаків після коми призводить до втрати інформації та неправильного аналізу.
  • Округлення проміжних результатів: Ви часто матимете кілька кроків як частину обчислення. Дотримуйтеся постійної точності на всіх етапах. Крім того, уникайте округлення на проміжних кроках, щоб запобігти ускладненню помилок округлення.
  Тонкі закладки дозволяють налаштувати панель закладок [Firefox]

Найкращі методи округлення чисел у Python

Давайте перерахуємо кілька найкращих практик, яких слід дотримуватися під час округлення чисел у Python:

  • Виберіть правильний тип даних: виберіть між типами даних із плаваючою точкою та десятковим типом даних залежно від програми. Якщо вам потрібно виконати високоточну арифметику з плаваючою комою, виберіть десятковий тип даних.
  • Використовуйте узгоджені рівні точності: установіть узгоджені рівні точності для десяткових чисел у всій програмі, щоб уникнути неочікуваних помилок округлення.
  • Методи округлення документів. У реальних програмах, які включають такі дані, як валюта та показники датчиків, важливо мати послідовну та задокументовану техніку округлення.

Підведенню

Давайте завершимо підручник коротким оглядом того, що ми дізналися:

  • Ви можете використовувати вбудовану функцію round() із цим синтаксисом round(num, ndigits). Використовуючи функцію round(), ви повинні знати про стратегію округлення банкіра. Таким чином, він округлює числа точно між двома цілими числами до найближчого парного цілого числа.
  • Ви можете використовувати функції ceil() і floor() із математичного модуля, щоб округлити задане число до найближчого цілого числа відповідно.
  • Якщо вам потрібно виконати високоточну арифметику з плаваючою комою, використовуйте десятковий модуль. Ви можете округлити числа з необхідною точністю та стратегією округлення.
  • Ви повинні знати про типові підводні камені з округленням чисел у Python. До них відноситься втрата інформації через округлення, результати округлення на проміжних кроках і використання різної точності в різних частинах коду.
  • Передові методи включають вибір правильного типу даних залежно від програми та документування узгоджених рівнів точності.

Далі дізнайтеся, як виконати поділ поверхів у Python.

Чи була ця стаття корисною?

Спасибі за ваш відгук!