Округление чисел и его особенности
Округлением чисел в Python занимается встроенная функция round.
round(number[, ndigits]) — округляет число number до ndigits знаков после запятой (по умолчанию, до нуля знаков, то есть, до ближайшего целого)
Со школы многие привыкли, что, когда (N + 1) знак = 5, а последующие знаки равны нулю, округление производится всегда в большую по модулю сторону.
Однако, как видно из примеров, в Python это не так. Здесь используется так называемое "Банковское округление", то есть округление к ближайшему чётному.
На практике это оказывается не так уж и важно, например:
Что-то не так, правда? На самом деле, всё именно так, как и задумывалось. Просто из-за проблем с точностью чисел с плавающей точкой это число чуть больше, чем 2.85, а потому округляется до 2.9.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Округление чисел
При выполнении различных арифметических операций важно, чтобы результат округлялся правильно. Часто требуется округлять в большую, меньшую сторону, до ближайшего целого или округлить до сотых.
Для этого программист может использовать различные инструменты, такие как встроенная функция round(), преобразование к типу int и функции из подключаемого модуля math.
Способы округления чисел
Для округления чисел придумано много способов, они не лишены недостатков, однако часто используются для решения задач. Разберёмся в тонкостях каждого из них.
Если используется стандартная библиотека math, то в начале кода её необходимо подключить. Сделать это можно, например, с помощью инструкции: import math .
math.ceil() — округление чисел в большую сторону
Функция получила своё имя от термина «ceiling», который используется в математике для описания числа, которое больше или равно заданному.
Любая дробь находится в целочисленном интервале, например, 1.2 лежит между 1 и 2. Функция ceil() определяет, какая из границ интервала наибольшая и записывает её в результат округления.
math.ceil(5.15) # = 6 math.ceil(6.666) # = 7 math.ceil(5) # = 5
Важно помнить, что функция определяет наибольшее число с учётом знака. То есть результатом округления числа -0.9 будет 0, а не -1.
math.floor() — округление чисел в меньшую сторону
Функция округляет дробное число до ближайшего целого, которое меньше или равно исходному. Работает аналогично функции ceil() , но с округлением в противоположную сторону.
math.floor(7.9) # = 7 math.floor(9.999) # = 9 math.floor(-6.1) # = -7
math.trunc() — отбрасывание дробной части
Возвращает целое число, не учитывая его дробную часть. То есть никакого округления не происходит, Python просто забывает о дробной части, приводя число к целочисленному виду.
math.trunc(5.51) # = 5 math.trunc(-6.99) # = -6
Избавиться от дробной части можно с помощью обычного преобразования числа к типу int. Такой способ полностью эквивалентен использованию trunc() .
int(5.51) # = 5 int(-6.99) # = -6
Нормальное округление
Python позволяет реализовать нормальное арифметическое округление, использовав функцию преобразования к типу int.
И хотя int() работает по другому алгоритму, результат её использования для положительных чисел полностью аналогичен выводу функции floor(), которая округляет числа «вниз». Для отрицательных аналогичен функции ceil().
math.floor(9.999) # = 9 int(9.999) # = 9 math.ceil(-9.999) # = -9 int(-9.999) # = -9
Чтобы с помощью функции int() округлить число по математическим правилам, необходимо добавить к нему 0.5, если оно положительное, и -0.5, если оно отрицательное.
Тогда операция принимает такой вид: int(num + (0.5 if num > 0 else -0.5)). Чтобы каждый раз не писать условие, удобно сделать отдельную функцию:
def int_r(num): num = int(num + (0.5 if num > 0 else -0.5)) return num
Функция работает также, как стандартная функция округление во второй версии Python (арифметическое округление).
int_r(11.5) # = 12 int_r(11.4) # = 11 int_r(-0.991) # = -1 int_r(1.391) # = 1
round() — округление чисел
round() — стандартная функция округления в языке Python. Она не всегда работает так, как ожидается, а её алгоритм различается в разных версиях Python.
В Python 2
Во второй версии Python используется арифметическое округление. Оно обладает постоянно растущей погрешностью, что приводит к появлению неточностей и ошибок.
Увеличение погрешности вызвано неравным количеством цифр, определяющих, в какую сторону округлять. Всего 4 цифры на конце приводят к округлению «вниз», и 5 цифр к округлению «вверх».
Помимо этого, могут быть неточности, например, если округлить число 2.675 до второго знака, получится число 2.67 вместо 2.68. Это происходит из-за невозможности точно представить десятичные числа типа «float» в двоичном коде.
В Python 3
В третьей версии Python используется банковское округление. Это значит, что округление происходит до самого близкого чётного.
Такой подход не избавляет от ошибок полностью, но уменьшает шанс их возникновения и позволяет программисту добиться большей точности при вычислениях.
round(3.5) # = 4 round(9.5) # = 10 round(6.5) # = 6 round(-6.5) # = -6 round(-7.5) # = -8
Но если вам по каким то причинам нужно округление как в Python 2, то можно воспользоваться функцией написанной нами выше на основе приведения к целому числу.
Округление до сотых
У функции raund() есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.
Пример округления до нужного знака:
round(3.555, 2) # = 3.56 round(9.515,1) # = 9.5 round(6.657,2) # = 6.66
Ошибки округления и модуль decimal
При округлении функцией round(), можно получить следующее:
round(2.65, 1) # = 2.6 round(2.85, 1) # = 2.9
Почему в одном случае округляется вниз, а в другом вверх? При переводе 2.85 в двоичную систему получается число, которое немного больше. Поэтому функция видит не «5», а «>5» и округляет вверх.
Проблему неточного представления чисел отлично иллюстрирует пример:
print (0.1 + 0.1 + 0.1) 0.30000000000000004
Из-за подобных ошибок числа типа «float» нельзя использовать там, где изменения значения на одну тысячную может привести к неверному результату. Решить данную проблему поможет модуль decimal.
decimal — модуль, позволяющий округлять десятичные дроби с почти 100% точностью. Его основной принцип: компьютер должен считать так, как считает человек. Речь идёт не о скорости вычисления, а о точности и отсутствии проблем неправильного представления чисел.
Как округлить элемент списка в python ?
Есть список:
P = [10.86, 13.52, 15.35, 16.15]
как округлить весь список до одной точки после запятой, ни или хотя-бы как округлить одно значение списка.
Через
round(P[0])
не работает
весь список тоже не округляет
мне бы хоть одно значение округлить, тогда уже через цикл for сделаю, а так вообще не знаю
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

как из списка взять последний элемент? (python)
есть функция, которая возвращает последний элемент list.pop(), но при этом она же (данная функция).
Как вывести элемент двусвязного списка из середины списка?
Изучал библиотеку стандартных шаблонов, в данном случае list: #include<iostream>.
Почему новый элемент списка каждый раз заменяет последний элемент списка?
Контролер: using Microsoft.AspNetCore.Mvc; using Auto_parts_store.Models.ViewModels; //.

Как удалить нужный элемент из списка или заменить этот элемент на другой?
Доброго времени суток, господа! Есть список: list<double> list1; Есть возможность добавить в.
№32 Функция round() / для начинающих
Round — встроенная функция Python. Ее задача — округлять число с плавающей точкой до той цифры, которую задает пользователь. Если ее не задать, то возвращается ближайшее целое число, ведь значением по умолчанию является 0. Функция round помогает «улучшать» числа с плавающей точкой.
Например, если округлить 4,5 до ближайшего целого, то вернется 5. Однако 4,7 будет результатом, если округлить до одной цифры 4,74. Быстрое округление — важный инструмент работы с такими числами.
- Число с плавающей точкой ( float_number ) представляет собой число, которое нужно округлить
- Количество дробей ( number_of_decimals ) определяет, до какой цифры будет округлено число. Функция возвращает float.
- Если количество цифр не указано, то по умолчанию там стоит ноль. В таком случае округление происходит до ближайшего целого и возвращается тоже целое число.
Примеры работы функции round в Python
Пример №1 — один параметр
# Целые числа
a = 12
round (a)
print (a)
# Десятичные числа
b = 21.7
c = 21.4
print(round(b))
print(round(c))
Здесь возвращается целое число, до которого и округляется число с плавающей точкой.
Пример №2 — оба параметра
# когда последняя цифра 5
a = 5.465
print(round(a, 2))
# когда последняя цифра >=5
b = 5.476
print(round(b, 2))
# когда последняя цифра меньше 5
c = 5.473
print(round(c, 2))
Практические примеры
Пример №1 — функция round помогает при работе с дробями
Когда дроби нельзя конвертировать в десятичные дроби, в дело вступает функция round. После десятичной точки обычно много цифр, как например в случае с 22/7 (Pi). Но обычно используется не больше 2-4 цифр. Вспомогательный встроенный в round тип будет округлять до ближайшего кратного 10.
round(3.675, 2) вернет 3,67, а не 3,68. Удивительно, но это не баг. Результат указывает на то, что большая часть дробей не могут считаться точными числами с плавающей точкой.
a = 1/6
print(a)
print(round(a, 2))
Пример №2 — исключения и ошибки
Функция round округлит 2, 2,5 и 1,5 до 2. Это тоже не баг, а нормальное поведение функции.
a = 1.5
b = 2
c = 2.5
print(round(a))
print(round(b))
print(round(c))
Если смотреть в целом, то работает функция вот так:
tup = (-40.95, 50.85, 10.98, 20.26, 30.05) # Создание кортежа
lis = [-39.29, -42.15 , -39.97, -10.98, 32.65] # Создание списка
print('Округление отрицательного десятичного числа = %.2f' %round(-19.48476))
print('Округление положительного десятичного числа = %.2f' %round(15.98763))
print('Округление со вторым параметром при положительном значении = %.3f' %round(11.98763, 3))
print('Округление со вторым параметром при отрицательном значении = %.3f' %round(-18.48476, 3))
print('Округление элементов в списке = %d' %round(lis[2]))
print('Округление элементов в списке = %d' %round(lis[4]))
print('Округление элементов в кортеже = %d' %round(tup[2]))
print('Округление элементов в кортеже = %d' %round(tup[4]))
print('Округление сумы чисел = %.2f' %round(20 + 40 - 20.6578, 2))
Округление отрицательного десятичного числа = -19.00
Округление положительного десятичного числа = 16.00
Округление со вторым параметром при положительном значении = 11.988
Округление со вторым параметром при отрицательном значении = -18.485
Округление элементов в списке = -40
Округление элементов в списке = 33
Округление элементов в кортеже = 11
Округление элементов в кортеже = 30
Округление сумы чисел = 39.34
Есть разные метода функции округления в Python. Одна из них — это сокращение.
Сокращение
Сокращение используется для уменьшения размеров элементов. Это самый простой способ округления до конкретного числа. Для положительных чисел функция округляет их до ближайшего целого в меньшую сторону, а для отрицательных — в большую.
Например, round(565.5556, -2) используется как функция сокращения. Она вернет 600.
Выводы
Функция round позволяет упростить работу с крупными объемами данных. Ее задача — возвращать число с определенным количеством цифр после точки.
- ТЕГИ
- Уроки Python для начинающих
