Как сделать округление в python

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

Round () — это встроенная функция, доступная в Python. Он вернет вам число с плавающей запятой, которое будет округлено до десятичных разрядов, указанных в качестве входных данных.

Если округляемые десятичные разряды не указаны, он считается равным 0 и округляется до ближайшего целого числа.

В этом уроке по Python вы узнаете:

Синтаксис:

параметры

  • float_num: число с плавающей точкой, которое будет округлено.
  • num_of_decimals: (необязательно) Количество десятичных знаков, которые следует учитывать при округлении. Это необязательно, и если не указано, по умолчанию используется 0, а округление выполняется до ближайшего целого числа.

Описание

Метод round () принимает два аргумента

  • число для округления и
  • десятичные разряды, которые следует учитывать при округлении.

Второй аргумент является необязательным и по умолчанию равен 0, если не указан, и в этом случае он округляется до ближайшего целого числа, а тип возвращаемого значения также будет целым числом.

При наличии десятичных разрядов, то есть второго аргумента, он округляется до заданного числа мест. Тип возврата будет с плавающей точкой.

Если число после запятой дано

  • > = 5 чем + 1 будет добавлено к окончательному значению

Возвращаемое значение

Он вернет целочисленное значение, если num_of_decimals не задано, и значение с плавающей запятой, если задано num_of_decimals. Обратите внимание, что значение будет округлено до +1, если значение после десятичной запятой>> 5, в противном случае оно вернет значение до указанного десятичного знака.

Какое влияние может оказать округление? (Округление против усечения)

Лучший пример демонстрации влияния округления — на фондовый рынок. В прошлом, то есть в 1982 году, Ванкуверская фондовая биржа (VSE): использовалась для урезания значений акций до трех десятичных знаков в каждой сделке.

Это было сделано почти 3000 раз каждый день. Накопленные усечения приводят к потере около 25 баллов в месяц.

Пример усечения значений в сравнении с округлением показан ниже.

Рассмотрим числа с плавающей запятой, сгенерированные ниже, как значения запасов. Прямо сейчас я генерирую это для диапазона

1 000 000 секунд между 0,01 и 0,05.

Примеры:

Чтобы продемонстрировать влияние округления, я написал небольшой фрагмент кода, в котором сначала нужно использовать числа с точностью до 3 десятичных знаков, то есть обрезать число после 3 десятичных знаков.

У меня есть исходное общее значение, общее значение, полученное из усеченных значений, и разница между исходным и усеченным значением.

Я пытаюсь округлить целые числа в python. Я посмотрел на встроенную функцию round (), но кажется, что раунды плавают.

моя цель-круглые числа до ближайшего кратного 10. т. е.: 5-> 10, 4-> 0, 95->100, etc.

5 и выше должны округлить вверх, 4 и ниже должны округлить вниз.

Это код, который у меня есть, который делает это:

Это лучший способ, чтобы достичь того, чего я хочу достичь? Есть ли встроенная функция что это? Кроме того, если это лучший способ, что-то не так с кодом, который я пропустил в тестировании?

на самом деле, вы все еще можете использовать функции Round:

Это округление до ближайшего кратного 10. Для 100 будет -2 как второй аргумент и так далее.

round () может принимать ints и отрицательные числа для мест, которые округляются слева от десятичного знака. Возвращаемое значение по-прежнему является float, но простое приведение исправляет это:

о round(..) функция, возвращающая float

этот float (двойная точность в Python) всегда является идеальным представлением целого числа, если оно находится в диапазоне [-2 53 ..2 53 ]. (Педанты обращают внимание: это не дополнение двух в двойниках, поэтому диапазон симметричен относительно нуля.)

посмотреть здесь для сведения.

Если вы хотите, чтобы algebric форме и по-прежнему использовать круглые для его трудно получить проще, чем:

эта функция будет округляться на порядок (справа налево) или цифрами так же, как формат обрабатывает десятичные знаки с плавающей запятой (слева направо:

вы также можете использовать класс десятичные:

на Python 3 Вы можете надежно использовать раунд с отрицательными местами и получить округленное целое число:

на Python 2 round не сможет вернуть правильное круглое целое число на больших числах, потому что круг всегда возвращает float:

другие 2 функции работают на Python 2 и 3

Я хотел сделать то же самое, но с 5 вместо 10, и придумал простую функцию. Надеюсь, это полезно:

Округление числа – одна из самых популярных арифметический операций. В Python есть встроенная функция, позволяющая выполнять эту операцию. С ее помощью пользователь может самостоятельно регулировать шаг округления или же сразу выполнять эту операцию до ближайшего целого числа. Эта функция также используется для округления чисел с плавающей точкой. Она имеет простой синтаксис, и поэтому новичку разобраться в том, как ее использовать, не составит труда.

Где применяется функция round()

Применять округление следует осторожно, поскольку даже малейшее изменение числа в большую или меньшую сторону может привести к непредсказуемым искажениям в вычислениях.

Очень просто этот эффект выразить на примере всем известного эффекта бабочки. Метафорически он выражается так: взмах крыла бабочки на одном конце света может привести к торнадо в совсем другой части земного шара. Дело в том, что большинство сложных систем в мире являются по своей природе нелинейными. То же касается и компьютерных программ со сложными алгоритмами. Одна малейшая ошибка в вычислениях может привести к нарушению работоспособности приложения или полному отказу от работы.

К слову, эффект бабочки был открыт Эдвардом Лоренцом, который был метеорологом, что не помешало ему полностью изменить представления о математике. Одним обычным скучным деньком он сидел и работал, пытаясь предсказать погоду. Правда, его работа была не сильно сложной на первый взгляд. Ему нужно было ввести начальные переменные, а дальше компьютерная модель уже составляла прогноз. Но этот расчет был ключевым, поскольку результаты вычислений использовались в дальнейших.

В один момент он захотел повторить в середине этой цепочки изначальные расчеты. И, что его удивило, они не сошлись. Он начал думать, и понял, что проблема крылась в том, что он округлял ключевые параметры до трех знаков после запятой. На самом деле, разница между этими значениями была микроскопическая – 0,000127. Но вот прогнозы получались различными.

Первые вычисления в цепочке, в целом, полностью соответствовали друг другу. А вот по мере выполнения дальнейших расчетов расхождение становилось все больше. В конце концов, разница была следующей: спокойная погода с солнышком и сильные грозы.

Проблема тогдашних компьютеров была в том, что они еще были очень слабыми и не могли качественно проводить настолько точные расчеты. Идея о том, что малые изменения в нелинейных системах могут приводить к непропорционально большим, стала настолько инновационной, что пошатнула даже постулат Ньютоновской механики, который говорил, что малые помехи на входе должны приводить к небольшим изменениям на выходе.

А эффект бабочки – это просто красивая метафора, которая наглядно демонстрирует то, насколько незначительное округление может все испортить.

Следовательно, применять функцию round() необходимо осторожно, не увлекаясь округлением чисел. Чем больше времени проходит с момента первого вычисления (или чем больше действий в компьютерном алгоритме), тем сильнее погрешность.

То есть, чисто теоретически, если вы пишете программу для анализа фондового рынка, то округление может привести к тому, что будет крах акций. Маловероятно, скажете? А кризис 2008 года произошел из-за того, что множество маловероятных событий сошлись вместе.

Наглядно продемонстрировать эффект бабочки можно и на пандемии. Об этом сейчас очень много говорят. Съел человек летучую мышь, и во всем мире начали умирать сотни тысяч людей. И хотя ученые в последнее время опровергли этот факт, но любая эпидемия развивается с единичного случая заражения. Причем ее рост экспоненциальный. И для прогнозирования вероятности прогрессирования пандемии вообще опасно использовать округление.

Собственно, именно по этой причине округление стало использоваться преимущественно для презентации результатов вычислений человеку. Ведь просто неудобно читать числа формата 3,656678587587. Значительно проще изобразить число 3,66, и все.

Поэтому знать, как округлять числа в Python, все же нужно.

Синтаксис функции round() в Python

Синтаксис у этой функции предельно прост. В качестве первого аргумента используется число с плавающей точкой. Это и есть то значение, которое необходимо округлить. Второй аргумент – это разряд числа, до которого необходимо осуществить округление дробного числа. При этом данное значение указывать вовсе не обязательно.

Если не вводить разрядность, до которой необходимо произвести округление, то оно будет осуществлено до ближайшего целого. Соответственно, и возвращаться будет число без каких-либо цифр после запятой.

Функция работает исключительно с числами с плавающей точкой.

Основные правила

Работает функция в соответствии с теми правилами, которым нас учили еще в школе:

  1. Если число меньше 5, то последний разряд числа, которое должно остаться после округления, увеличивается на единицу. То же касается ситуаций, когда число равняется 5.
  2. Если же оно меньше 5, то тогда округление идет в нижнюю сторону.

Но и здесь есть нюанс. В Python используется банковское округление, когда округление осуществляется к ближайшему четному. Но иногда округление происходит по описанным выше правилам. Все потому, что в Python есть проблемы с точностью чисел с плавающей точкой, и в некоторых случаях округление будет осуществляться в большую сторону, а иногда – в меньшую.

А теперь давайте приступим непосредственно к рассмотрению примеров использования этой функции на практике.

Примеры работы функции round() в Python

Принцип работы функции прост, и его легко понять даже человеку, который никогда не изучал программирование. Все дело в том, что нам еще в школе рассказывали, как производится округление, поэтому каждый пользователь понимает, что в итоге должен получить после выполнения этой операции. Знает он и алгоритм. В общем, приступаем непосредственно к примерам.

Пример №1 (один параметр)

Давайте представим, что нам надо округлить два десятичных числа – 21,7 и 21,4.

b = 21.7

c = 21.4

print(round(b))

print(round(c))

После этого на строку вывода пойдут числа 22 и 21. Почему? Потому что после запятой стоит в первом случае число 7, и округление происходит в большую сторону, а во втором – число 4, и число округляется в меньшую.

Здесь мы использовали только один параметр функции. А как же работает округление чисел с большим количеством знаков после запятой до нужного нам разряда?

Пример №2 (оба параметра)

Допустим, у нас есть два числа. Первое – это 5,476. После округления до второго знака после запятой оно станет 5,48. Второе же число, которое нам нужно округлить – это 5,473. После того, как оно будет использоваться в качестве аргумента функции round() с округлением до второго знака после запятой, на выходе получится число 5,47.

b = 5.476

print(round(b, 2))

c = 5.473

print(round(c, 2))

Практические примеры

Итак, мы уже рассмотрели обобщенные примеры, которые наглядно демонстрируют работу функции. Тем не менее, для полноценного погружения в тему недостаточно реальных примеров из практики. Какие есть особые случаи, которые следует учитывать при использовании функции round()? Есть некоторые нюансы.

Пример №1 – функция round() при работе с дробями

Функция round () может работать не только с десятичными дробями, но и обычными. Большая их проблема – нередко цифр после точки так много, что число становится нечитаемым. При том, что реальной необходимости в том, чтобы было такое большое количество знаков, нет.

При использовании функции нередко появляются такие ситуации, которые изначально могут показаться багом, но когда понять логику интерпретатора, то все становится более понятно.

Так, если использовать функцию round применительно к числу 3.675 и округлением до 2 разряда после запятой, то возвращаемое значение будет 3,67, а не 3,68, как могло бы показаться на первый взгляд.

А вот если использовать дробное значение 1/6, то после округления оно превратится в 0,17, хотя без него это будет 0,1(6).

Пример №2 – исключения и ошибки

С помощью функции round можно округлить до 2 как непосредственно 2, так и 2,5, так и 1,5. Этот момент также стоит учитывать, поскольку часто новички не понимают, как работает эта функция и пытаются исправлять несуществующие баги.

Сокращение

Округление можно использовать не только для того, чтобы сделать вид числа более красивым, или совершать операции с дробными числами с меньшим количеством знаков после запятой. Оно также применяется для уменьшения общего количества элементов в числе. Для этого необходимо использовать во втором аргументе отрицательное число.

Например, эта функция вернет число 600.

round(565.5556, -2)

Таким образом, функция round() – надежный помощник в работе с большими массивами числовых данных. Она значительно упрощает жизнь. Важно учитывать, что у нее есть ряд недостатков. Если требуются научные вычисления, то округление даже до одной тысячной может привести к непредсказуемым искажениям результатов исследований.

Типичный пример – эффект бабочки, который уже стал именем нарицательным. Он проявляет себя во всех сферах, причем не только в науке, а, например, на финансовых рынках.

Функция round() возвращает число с плавающей запятой, округленное до указанного количества десятичных знаков.

Параметры

Функция round() в Python принимает два параметра:

  • number ‒ число, которое нужно округлить;
  • ndigits (необязательно) ‒ число, до которого округляется данное число, по умолчанию 0.

Возвращаемое значение

  • Если ndigits не указан, команда возвращает ближайшее к заданному числу целое число.
  • Если задано ndigits, функция возвращает число, округленное до цифр ndigits.

Пример 1: Как работает?

Пример 2: Округлить число до заданного количества десятичных знаков

Примечание: Поведение round() для чисел с плавающей запятой может вызывать удивление. Раунд уведомления (2,675, 2) дает 2,67 вместо ожидаемых 2,68. Это не ошибка: это результат того факта, что большинство десятичных дробей не могут быть представлены точно как числа с плавающей запятой.

Когда десятичное число 2,675 преобразуется в двоичное число с плавающей запятой, оно снова заменяется двоичным приближением, точное значение которого:

В связи с этим он округляется до 2,67.

Если вы находитесь в ситуации, когда такая точность необходима, рассмотрите возможность использования модуля decimal, который разработан для операций с плавающей запятой:

Читайте также: