decimal¶
>>> import decimal>>> x = decimal.Decimal(‘3.4’) >>> y = decimal.Decimal(‘4.5’)>>> x * y decimal.Decimal(‘15.30’)>>> x / y decimal.Decimal(‘0.7555555555555555555555555556’)>>> decimal.getcontext().prec = 3 # Изменить точность и повторить вычисления >>> x * y decimal.Decimal(‘15.3’)>>> x / y decimal.Decimal(‘0.756’)# Изменить точность только для одного блока инструкций
with decimal.localcontext(decimal.Context(prec=10)): e = x * y # decimal.Decimal(‘15.30’) f = x / y # decimal.Decimal(‘0.7555555556’)
- class
Decimal
([value[, context]])¶ значение числа может быть представлено как:
целое
строка “4.5”
кортеж (sign, digits, exponent)
sign - 0|1, положительное|отрицательное
digits - кортеж в виде целых чисел
exponent - целочисленная экспонента
контекст передается в виде объекта Context()
>>> a = decimal.Decimal(42) # Decimal(“42”)
>>> a = decimal.Decimal(“37.45”) # Decimal(“37.45”)
>>> a = decimal.Decimal((1,(2,3,4,5),-2)) # Decimal(“-23.45”)
>>> decimal.Decimal(“Infinity”) # бесконечность
>>> decimal.Decimal(“NaN”) # не число
-
exp
([context])¶ Натуральная степень e ** d
-
fma
(y, z[, context])¶ self * y + z без округления результата x*y
-
ln
([context])¶ Натуральный логарифм (по основанию e) числа self
-
log10
([context])¶ Десятичный логарифм числа self
-
sqrt
([context])¶ Корень квадратный из числа self
- class
Contexn
(prec=None, rounding=None, traps=None, flags=None, Emin=None, Emax=None, capitals=1)¶ Контекст для работы с дробными десятичными числами. Обычно новые объекты класса Context не создаются непосредственно. Для этого используются функция
getcontext()
илиlocalcontext()
, возвращающая текущий объект Context.- Parameters
prec (int) – количество цифр после десятичной точки
rounding – порядок округления
traps – список сигналов, которые возбуждают исключения в различных обстоятельствах (например, при попытке выполнить деление на ноль)
flags – список сигналов, свидетельствующих о начальном состоянии контекста (например, переполнение). Обычно аргумент flags не указывается.
Emin (int) – минимальное значения экспоненты
Emax (int) – максимальное значения экспоненты
capitals (int) – какой символ, ‘E’ или ‘e’, должен использоваться для обозначения экспоненты. По умолчанию имеет значение 1 (‘E’).
Порядки округления
ROUND_CEILING - Округление в сторону положительной бесконечности. Например, число 2.52 будет округлено до 2.6, а число –2.58 до –2.5.
ROUND_DOWN - Округление в сторону нуля. Например, число 2.58 будет округлено до 2.5, а число –2.58 – до -2.5.
ROUND_FLOOR - Округление в сторону отрицательной бесконечности. Например, число 2.52 будет округлено до 2.5, а число –2.58 до –2.6.
ROUND_HALF_DOWN - Округление в сторону от нуля, если округляемая часть больше половины последнего значимого разряда, в противном случае округление будет выполнено в сторону нуля. Например, число 2.58 будет округлено до 2.6, число 2.55 будет округлено до 2.5, а число –2.58 до –2.6.
ROUND_HALF_EVEN - То же, что и ROUND_HALF_DOWN, только если округляемая часть равна точно половине последнего значимого разряда, результат округляется вниз, если предыдущая цифра четная, и вверх – если предыдущая цифра нечетная. Например, число 2.65 будет округлено до 2.6, число 2.55 также будет округлено до 2.6.
ROUND_HALF_UP - То же, что и ROUND_HALF_DOWN, только если округляемая часть равна точно половине последнего значимого разряда, результат округляется в сторону от нуля. Например, число 2.55 будет округлено до 2.6, а число –2.55 до –2.6.
ROUND_UP - Округление в сторону от нуля. Например, число 2.52 будет округлено до 2.6, а число –2.52 – до –2.6.
ROUND_05UP - Округление в сторону от нуля, если последний значимый разряд содержит цифру 0 или 5, в противном случае округление выполняется в сторону нуля. Например, число 2.54 будет округлено до 2.6, число 2.64 также будет округлено до 2.6.
Типы сигналов
Сигнал
Описание
Clamped
Экспонента была откорректирована в соответствии с допустимым диапазоном.
DivisionByZero
Деление небесконечного числа на 0.
Inexact
Погрешность округления.
InvalidOperation
Выполнена недопустимая операция.
Overflow
После округления экспонента превысила значение Emax. Также генерирует сигналы Inexact и Rounded.
Rounded
Округление выполнено. Может появиться, если при округлении точность представления числа не пострадала (например, при округлении «1.00» до «1.0»).
Subnormal
Перед округлением экспонента была меньше значения Emin.
Underflow
Потеря значащих разрядов числа. Результат операции был округлен до 0. Также генерирует сигналы Inexact и Subnormal.
Иерархия сигналов
- ArithmeticError (встроенное исключение)
- DecimalException
Clamped
DivisionByZero
- Inexact
Overflow
Underflow
InvalidOperation
- Rounded
Overflow
Underflow
- Subnormal
Underflow
-
clear_flags
()¶ Сбрасывает все флаги
-
copy
()¶ Возвращает копию контекста
- class
BasicContext
¶ Предопределенный контекст с точностью до девяти знаков после десятичной точки. Использует правило округления ROUND_HALF_UP; параметр Emin имеет значение -999999999; параметр Emax имеет значение 999999999; разрешены все сигналы, кроме Inexact, Rounded и Subnormal.
- class
DefaultContext
¶ Контекст по умолчанию, который используется при создании нового контекста (то есть значения параметров этого контекста используются как значения по умолчанию для параметров нового контекста). Определяет точность до 28 знаков после десятичной точки; округление ROUND_HALF_EVEN; включает флаги Overflow, InvalidOperation и DivisionByZero.
- class
ExtendedContext
¶ Предопределенный контекст с точностью до девяти знаков после десятичной точки. Использует правило округления ROUND_HALF_EVEN; параметр Emin имеет значение -999999999; параметр Emax имеет значение 999999999; все сигналы запрещены. Никогда не возбуждает исключения, но в результате операций может возвращаться значение NaN или Infinity.
- class
Inf
¶ То же, что и Decimal(“Infinity”).
- class
negInf
¶ То же, что и Decimal(“-Infinity”).
- class
NaN
¶ То же, что и Decimal(“NaN”).
-
getcontext
()¶ возвращает текущий объект Context
-
localcontext
([c])¶ Создает менеджера контекста, который устанавливает контекст в качестве текущего для тела with. Без аргумента возвращает копию текущего контекста.
>>> with localcontext() as c: c.prec = 5 # инструкции
-
setcontext
(c)¶ Устанавливает контекст для потока выполнения.
Примеры¶
>>> a = Decimal(“42.5”)
>>> b = Decimal(“37.1”)
>>> a + b
Decimal(“79.6”)
>>> a / b
Decimal(“1.145552560646900269541778976”)
>>> divmod(a,b)
(Decimal(“1”), Decimal(“5.4”))
>>> max(a,b)
Decimal(“42.5”)
>>> c = [Decimal(“4.5”), Decimal(“3”), Decimal(“1.23e3”)]
>>> sum(c)
Decimal(“1237.5”)
>>> [10*x for x in c]
[Decimal(“45.0”), Decimal(“30”), Decimal(“1.230e4”)]
>>> float(a)
42.5
>>> str(a)
‘42.5’
>>> getcontext().prec = 4
>>> a = Decimal(“3.4562384105”)
>>> a
Decimal(“3.4562384105”)
>>> b = Decimal(“5.6273833”)
>>> getcontext().flags[Rounded]
0
>>> a + b
9.084
>>> getcontext().flags[Rounded]
1
>>> a / Decimal(“0”)
Traceback (most recent call last):
File “<stdin>”, line 1, in ?
decimal.DivisionByZero: x / 0
>>> getcontext().traps[DivisionByZero] = False
>>> a / Decimal(“0”)
Decimal(“Infinity”)