Десятичный Python - деление, округление, точность
Десятичный модуль Python помогает нам в делении с надлежащей точностью и округлением чисел.
Десятичный модуль Python
Работа с десятичными числами
Десятичные числа — это просто числа с плавающей запятой с фиксированными десятичными точками. Мы должны правильно округлять числа в зависимости от наших потребностей, иначе результаты могут быть неожиданными. Десятичный модуль Python помогает нам быть более точными с десятичными числами.
Нужен десятичный модуль
Прежде чем приступить к использованию этого модуля, давайте посмотрим, о какой точности мы говорим, и выясним, зачем нам на самом деле нужен этот модуль. Посмотрите на следующий фрагмент кода:
division = 72 / 7
print(division)
Использование десятичного модуля
Во всех программах, которые мы делаем в этом посте, мы будем импортировать десятичный модуль:
import decimal
Возможно, мы импортируем только определенную функцию из этого модуля. Это можно сделать как:
from decimal import Decimal
Давайте начнем вставлять десятичный модуль в некоторые программы.
Пример десятичного модуля Python
Сейчас мы начнем с примеров, связанных с модулем.
Исправление деления с помощью десятичных знаков
Здесь мы исправим программу, которую мы написали выше, чтобы выполнить деление, которое должно было дать результат с плавающей запятой. Модифицированная программа с десятичным модулем будет выглядеть так:
import decimal
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
Контроль точности для одной операции
В прошлой программе в ответе теперь было 25 знаков после запятой. Но что, если нам нужно только до трех знаков после запятой? Это тоже можно контролировать. Здесь мы будем контролировать точность ответа, который не отразится на других операциях в нашей программе:
import decimal
with decimal.localcontext() as ctx:
ctx.prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
Контроль точности для всей программы
В программе также можно глобально контролировать точность. Это не рекомендуется все время, когда вы имеете дело с большим количеством чисел в вашей программе. Вот пример:
import decimal
decimal.getcontext().prec = 3
division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
Округление чисел
Можно изящно округлить числа с помощью функции round(...)
. Давай попробуем:
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(rounded)
import decimal
#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
Получение десятичного контекста Python
Если вам интересно посмотреть контекст по умолчанию, установленный по умолчанию для десятичного модуля, вы можете использовать следующий скрипт:
from decimal import *
print(getcontext())