Виды округления в Python 3

Питон

В языке Python существует несколько видов округления. Среди них представлены функция непосредственного округления round, а также ceil, floor и trunc модуля math. Кроме этого возможно округление при помощи приведения к типу int и не используя библиотеки.

Ceil

Функция math.ceil позволяет округлить число в большую сторону. При чём к большему число округляется, учитывая свой знак.

Для положительного числа

Ввод:print («Ceil:», math.ceil(2.4))
Вывод:Ceil: 3

Для отрицательного числа

Ввод:print («Ceil:», math.ceil(-1.2))
Вывод:Ceil: -1

Floor

Math.floor округляет число в меньшую сторону. Работает по принципу ceil, но наоборот.

Ввод:print («Floor:», math.floor(7.99))
Вывод:Floor: 7

Trunc

Math.trunc отбрасывает дробную часть.Округление при этом не выполняется. Число всего лишь преобразуется из класса float в класс int.

Ввод:print («Trunc:», math.trunc(2.3))
Вывод:Trunc: 2

Округление без использования библиотек

Результат работы функции int,приводящей число из вещественного в целое аналогичен тому, что даёт функция trunc. Арифметическое округление можно реализовать при помощи прибавления 0.5 к результату приведения, если число является положительным, и отнимания 0.5, если оно отрицательное.

Код данной процедуры имеет такой вид:

defmath_round(n):
n = int(n + (0.5 if n> 0 else -0.5))
return n

Ввод:print («Math round:», math_round(2.5))
Вывод:Math round: 3

Функция round

Round является стандартной функцией для округления в языке Python. От математического округления она отличается тем, что если дробная часть равна 0.5, то числа приводится к ближайшему чётному. Но это характерно лишь для 3-й версии языка Python. В Python 2 округление является арифметическим.

Ввод:print («Round:», round(2.5))
Вывод:Round: 2

Кроме самого действительного числа функция round имеет ещё один необязательный аргумент. Он является целым числом и показывает до какого количества знаков после запятой будет происходить округление.

Ввод:print («Round, precision 0.01:», round(-4.335, 2))
Вывод:Round, precision 0.01: -4.33

Ошибки округления

Итоги работы функции round могут иметь погрешность. Это происходит из-за неточности перевода числа из десятичной системы в двоичную. Далее продемонстрированы примеры различного вывода при схожих обстоятельствах.

  1. Ввод:print («Round, precision 0.1:», round(4.95, 1))
    Вывод:Round, precision 0.1: 5.0
  2. Ввод:print («Round, precision 0.1:», round(4.35, 1))
    Вывод:Round, precision 0.1: 4.3

Тип Decimal и его округление

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

Decimal – это специальный тип для чисел фиксированной точности. Его значения содержат фиксированное количество знаков после запятой. Для округления чисел данного типа используется метод quantize. В качестве первого аргумента он содержит объект типа Decimal, показывающий до какого количество знаков необходимо округлить число.

Ввод:num = Decimal(«4.35»)
print(«Quantize: «, num.quantize(Decimal(«1.0»)))
Вывод:Quantize: 4.4

Также функция quantize имеет ещё один параметр. Это константа, определяющая округление. По умолчанию константа имеет значение ROUND_HALF_EVEN. Это значит, что число округляется в большую сторону в том случае, если вторая с конца цифра нечетная, а цифра, находящаяся после неё, имеет значение 5 или более.

Пример с нечётной цифрой

Ввод:num = Decimal(«9.015»)
print(«Quantize (Half even): «, num.quantize(Decimal(«1.00»), ROUND_HALF_EVEN))
Вывод:Quantize(Half even) : 9.02

Пример с чётной цифрой

Ввод:num = Decimal(«9.045»)
print(«Quantize (Half even) : «, num.quantize(Decimal(«1.00»), ROUND_HALF_EVEN))
Вывод:Quantize(Half even) : 9.04

Кроме константы по умолчанию присутствуют следующие значения:

  1. ROUND_HALF_UP:Округляет вверх, если последняя цифра числа больше либо равна 5.
  2. ROUND_HALF_DOWN: Округляет вверх, если последняя цифра числа строго больше 5.
  3. ROUND_05UP:Число округляется в большую сторону только если предпоследняя цифра равна 0. Иначе — в меньшую.
  4. ROUND_CEILING: Всегда округляет в большую сторону, кроме случая, когда последняя цифра равна 0.
  5. ROUND_FLOOR: Всегда округляет в меньшую сторону.

 

Оцените статью
Образовательный портал WELCOME4U.RU
Добавить комментарий

Adblock
detector