При виконанні різних арифметичних операцій важливо, щоб результат округляється правильно. Часто потрібно округляти в більшу, меншу сторону, до найближчого цілого або округлити до сотих. Для цього програміст може використовувати різні інструменти, такі як вбудована функція round (), перетворення до типу int і функції з модуля math.
Способи округлення чиселmath.ceil() — округление чисел в большую сторонуimport matha = math.ceil(5.15)print(a)6 Функція отримала своє ім'я від терміна «ceiling», який використовується в математиці для опису числа, яке більше або дорівнює заданому. Будь-яка дріб знаходиться в целочисленном інтервалі, наприклад, 1.2 лежить між 1 і 2. Функція ceil () визначає, яка з меж інтервалу найбільша і записує її в результат округлення.import matha = math.ceil(6.666)print(a)7import matha = math.ceil(5)print(a)5 Важливо пам'ятати, що функція визначає найбільше число з урахуванням знака.
Способи округлення чиселmath.floor () - округлення чисел в меншу сторону. Функція округлює дробове число до найближчого цілого, яке менше або дорівнює початковому. Працює аналогічно функції ceil (), але з округленням в протилежну сторону.import matha = math.floor(7.9) print(a)7import matha = math.floor(9.999) print(a)9import matha = math.floor(-6.1)print(a)-7
Способи округлення чиселmath.trunc () - відкидання дробової частини. Возвращает целое число, не учитывая его дробную часть. То есть никакого округления не происходит, Python просто забывает о дробной части, приводя число к целочисленному виду.import matha = math.trunc(5.51) print(a)5import matha = math.trunc(-6.99) print(a)-6 Позбутися від дробової частини можна за допомогою звичайного перетворення числа до типу int. Такий спосіб повністю еквівалентний використанню trunc ().a = int(5.51) print(a)5a = int(-6.99) print(a)-6
Способи округлення чисел. Нормальне округлення. Python дозволяє реалізувати нормальний арифметичне округлення, використавши функцію перетворення до типу int. І хоча int () працює за іншим алгоритмом, результат її використання для позитивних чисел повністю аналогічний висновку функції floor (), яка округлює числа «вниз». Для негативних аналогічний функції ceil ().import matha = math.floor(9.999) print(a)9a = int(9.999)print(a)9import matha = math.ceil(-9.999) print(a)-9a = int(-9.999)print(a)-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 numprint(int_r(11.5))print(int_r(11.4))print(int_r(-0.991))print(int_r(1.391))>>> %Run 2.py1211-11>>>
round() — округлення чиселround () - стандартна функція округлення в мові Python. Вона не завжди працює так, як очікується, а її алгоритм різниться в різних версіях Python. У третій версії Python використовується банківське округлення. Це означає, що округлення відбувається до найближчої парного.a =round(3.5)print(a)a =round(9.5)print(a)a =round(6.5)print(a)a =round(-6.5)print(a)a =round(-7.5)print(a)>>> %Run 55.py4106-6-8>>>
Округлення до сотих. У функции raund() есть ещё один аргумент. Он показывает до какого количества знаков после запятой следует округлять. Таким образом, если нам надо в Python округлить до сотых, этому параметру следует задать значение 2.a =round(3.555, 2)print(a)a =round(9.515, 1)print(a)a =round(6.657, 2)print(a)a =round(-6.527, 2)print(a)a =round(-7.598, 2)print(a)>>> %Run 55.py3.569.56.66-6.53-7.6>>>
Помилки округлення і модуль decimal. При округленні функцією round (), можна отримати наступне:a =round(2.65, 1)print(a)a =round(2.85, 1)print(a)>>> %Run 55.py2.62.9>>> Чому в одному випадку округляється вниз, а в іншому вгору? При перекладі 2.85 в двійкову систему виходить число, яке трохи більше. Тому функція бачить не «5», а «> 5» і округлює вгору. Вирішити дану проблему допоможе модуль decimal.
Модуль decimal. При роботі з числами з плаваючою точкою (тобто float) ми стикаємося з тим, що в результаті обчислень ми отримуємо не зовсім вірний результат:a = 0.1 + 0.1 + 0.1print(a) # 0.30000000000000004 Проблему може вирішити використання функції round (), яка округлити число. Однак є й інший спосіб, який полягає в використанні вбудованого модуля decimal.
Ключовим компонентом для роботи з числами в цьому модулі є клас Decimal. Для його застосування нам треба створити його об'єкт за допомогою конструктора. У конструктор передається строкове значення, яке представляє число :from decimal import Decimalnumber = Decimal("0.1")Після цього об'єкт Decimal можна використовувати в арифметичних операціях:from decimal import Decimal number = Decimal("0.1")number = number + number + numberprint(number) # 0.3
В операціях з Decimal можна використовувати цілі числа:from decimal import Decimalnumber = Decimal("0.1")number = number + 2print(number)# 2,1 Однак не можна змішувати в операціях дробові числа float і Decimal:from decimal import Decimalnumber = Decimal("0.1")number = number + 0.1print(number)# тут виникне помилка