Поиск по сайту:

Десятичный 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())