blob: ee746e933dea4edcb05693ceb28365781e4ffc65 [file] [log] [blame]
Christian Heimes3feef612008-02-11 06:19:17 +00001:mod:`decimal` --- Decimal fixed point and floating point arithmetic
2====================================================================
Georg Brandl116aa622007-08-15 14:28:22 +00003
4.. module:: decimal
5 :synopsis: Implementation of the General Decimal Arithmetic Specification.
6
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Eric Price <eprice at tjhsst.edu>
8.. moduleauthor:: Facundo Batista <facundo at taniquetil.com.ar>
9.. moduleauthor:: Raymond Hettinger <python at rcn.com>
10.. moduleauthor:: Aahz <aahz at pobox.com>
11.. moduleauthor:: Tim Peters <tim.one at comcast.net>
Stefan Krah1919b7e2012-03-21 18:25:23 +010012.. moduleauthor:: Stefan Krah <skrah at bytereef.org>
Georg Brandl116aa622007-08-15 14:28:22 +000013.. sectionauthor:: Raymond D. Hettinger <python at rcn.com>
14
Andrew Kuchling2e3743c2014-03-19 16:23:01 -040015**Source code:** :source:`Lib/decimal.py`
16
Christian Heimesfe337bf2008-03-23 21:54:12 +000017.. import modules for testing inline doctests with the Sphinx doctest builder
18.. testsetup:: *
19
20 import decimal
21 import math
22 from decimal import *
23 # make sure each group gets a fresh context
24 setcontext(Context())
Georg Brandl116aa622007-08-15 14:28:22 +000025
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040026--------------
27
Stefan Krah1919b7e2012-03-21 18:25:23 +010028The :mod:`decimal` module provides support for fast correctly-rounded
29decimal floating point arithmetic. It offers several advantages over the
30:class:`float` datatype:
Georg Brandl116aa622007-08-15 14:28:22 +000031
Christian Heimes3feef612008-02-11 06:19:17 +000032* Decimal "is based on a floating-point model which was designed with people
33 in mind, and necessarily has a paramount guiding principle -- computers must
34 provide an arithmetic that works in the same way as the arithmetic that
35 people learn at school." -- excerpt from the decimal arithmetic specification.
36
Georg Brandl116aa622007-08-15 14:28:22 +000037* Decimal numbers can be represented exactly. In contrast, numbers like
Terry Jan Reedya9314632012-01-13 23:43:13 -050038 :const:`1.1` and :const:`2.2` do not have exact representations in binary
Raymond Hettingerd258d1e2009-04-23 22:06:12 +000039 floating point. End users typically would not expect ``1.1 + 2.2`` to display
40 as :const:`3.3000000000000003` as it does with binary floating point.
Georg Brandl116aa622007-08-15 14:28:22 +000041
42* The exactness carries over into arithmetic. In decimal floating point, ``0.1
Thomas Wouters1b7f8912007-09-19 03:06:30 +000043 + 0.1 + 0.1 - 0.3`` is exactly equal to zero. In binary floating point, the result
Georg Brandl116aa622007-08-15 14:28:22 +000044 is :const:`5.5511151231257827e-017`. While near to zero, the differences
45 prevent reliable equality testing and differences can accumulate. For this
Christian Heimes3feef612008-02-11 06:19:17 +000046 reason, decimal is preferred in accounting applications which have strict
Georg Brandl116aa622007-08-15 14:28:22 +000047 equality invariants.
48
49* The decimal module incorporates a notion of significant places so that ``1.30
50 + 1.20`` is :const:`2.50`. The trailing zero is kept to indicate significance.
51 This is the customary presentation for monetary applications. For
52 multiplication, the "schoolbook" approach uses all the figures in the
53 multiplicands. For instance, ``1.3 * 1.2`` gives :const:`1.56` while ``1.30 *
54 1.20`` gives :const:`1.5600`.
55
56* Unlike hardware based binary floating point, the decimal module has a user
Thomas Wouters1b7f8912007-09-19 03:06:30 +000057 alterable precision (defaulting to 28 places) which can be as large as needed for
Christian Heimesfe337bf2008-03-23 21:54:12 +000058 a given problem:
Georg Brandl116aa622007-08-15 14:28:22 +000059
Mark Dickinson43ef32a2010-11-07 11:24:44 +000060 >>> from decimal import *
Georg Brandl116aa622007-08-15 14:28:22 +000061 >>> getcontext().prec = 6
62 >>> Decimal(1) / Decimal(7)
Christian Heimes68f5fbe2008-02-14 08:27:37 +000063 Decimal('0.142857')
Georg Brandl116aa622007-08-15 14:28:22 +000064 >>> getcontext().prec = 28
65 >>> Decimal(1) / Decimal(7)
Christian Heimes68f5fbe2008-02-14 08:27:37 +000066 Decimal('0.1428571428571428571428571429')
Georg Brandl116aa622007-08-15 14:28:22 +000067
68* Both binary and decimal floating point are implemented in terms of published
69 standards. While the built-in float type exposes only a modest portion of its
70 capabilities, the decimal module exposes all required parts of the standard.
71 When needed, the programmer has full control over rounding and signal handling.
Christian Heimes3feef612008-02-11 06:19:17 +000072 This includes an option to enforce exact arithmetic by using exceptions
73 to block any inexact operations.
74
75* The decimal module was designed to support "without prejudice, both exact
76 unrounded decimal arithmetic (sometimes called fixed-point arithmetic)
77 and rounded floating-point arithmetic." -- excerpt from the decimal
78 arithmetic specification.
Georg Brandl116aa622007-08-15 14:28:22 +000079
80The module design is centered around three concepts: the decimal number, the
81context for arithmetic, and signals.
82
83A decimal number is immutable. It has a sign, coefficient digits, and an
84exponent. To preserve significance, the coefficient digits do not truncate
Thomas Wouters1b7f8912007-09-19 03:06:30 +000085trailing zeros. Decimals also include special values such as
Georg Brandl116aa622007-08-15 14:28:22 +000086:const:`Infinity`, :const:`-Infinity`, and :const:`NaN`. The standard also
87differentiates :const:`-0` from :const:`+0`.
88
89The context for arithmetic is an environment specifying precision, rounding
90rules, limits on exponents, flags indicating the results of operations, and trap
91enablers which determine whether signals are treated as exceptions. Rounding
92options include :const:`ROUND_CEILING`, :const:`ROUND_DOWN`,
93:const:`ROUND_FLOOR`, :const:`ROUND_HALF_DOWN`, :const:`ROUND_HALF_EVEN`,
Thomas Wouters1b7f8912007-09-19 03:06:30 +000094:const:`ROUND_HALF_UP`, :const:`ROUND_UP`, and :const:`ROUND_05UP`.
Georg Brandl116aa622007-08-15 14:28:22 +000095
96Signals are groups of exceptional conditions arising during the course of
97computation. Depending on the needs of the application, signals may be ignored,
98considered as informational, or treated as exceptions. The signals in the
99decimal module are: :const:`Clamped`, :const:`InvalidOperation`,
100:const:`DivisionByZero`, :const:`Inexact`, :const:`Rounded`, :const:`Subnormal`,
Stefan Krah1919b7e2012-03-21 18:25:23 +0100101:const:`Overflow`, :const:`Underflow` and :const:`FloatOperation`.
Georg Brandl116aa622007-08-15 14:28:22 +0000102
103For each signal there is a flag and a trap enabler. When a signal is
Raymond Hettinger86173da2008-02-01 20:38:12 +0000104encountered, its flag is set to one, then, if the trap enabler is
Georg Brandl116aa622007-08-15 14:28:22 +0000105set to one, an exception is raised. Flags are sticky, so the user needs to
106reset them before monitoring a calculation.
107
108
109.. seealso::
110
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000111 * IBM's General Decimal Arithmetic Specification, `The General Decimal Arithmetic
Raymond Hettinger960dc362009-04-21 03:43:15 +0000112 Specification <http://speleotrove.com/decimal/decarith.html>`_.
Georg Brandl116aa622007-08-15 14:28:22 +0000113
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000114.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +0000115
116
117.. _decimal-tutorial:
118
119Quick-start Tutorial
120--------------------
121
122The usual start to using decimals is importing the module, viewing the current
123context with :func:`getcontext` and, if necessary, setting new values for
124precision, rounding, or enabled traps::
125
126 >>> from decimal import *
127 >>> getcontext()
Stefan Krah1919b7e2012-03-21 18:25:23 +0100128 Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
Mark Dickinsonb1d8e322010-05-22 18:35:36 +0000129 capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,
Christian Heimesfe337bf2008-03-23 21:54:12 +0000130 InvalidOperation])
Georg Brandl116aa622007-08-15 14:28:22 +0000131
132 >>> getcontext().prec = 7 # Set a new precision
133
Mark Dickinsone534a072010-04-04 22:13:14 +0000134Decimal instances can be constructed from integers, strings, floats, or tuples.
135Construction from an integer or a float performs an exact conversion of the
136value of that integer or float. Decimal numbers include special values such as
Georg Brandl116aa622007-08-15 14:28:22 +0000137:const:`NaN` which stands for "Not a number", positive and negative
Stefan Krah1919b7e2012-03-21 18:25:23 +0100138:const:`Infinity`, and :const:`-0`::
Georg Brandl116aa622007-08-15 14:28:22 +0000139
Facundo Batista789bdf02008-06-21 17:29:41 +0000140 >>> getcontext().prec = 28
Georg Brandl116aa622007-08-15 14:28:22 +0000141 >>> Decimal(10)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000142 Decimal('10')
143 >>> Decimal('3.14')
144 Decimal('3.14')
Mark Dickinsone534a072010-04-04 22:13:14 +0000145 >>> Decimal(3.14)
146 Decimal('3.140000000000000124344978758017532527446746826171875')
Georg Brandl116aa622007-08-15 14:28:22 +0000147 >>> Decimal((0, (3, 1, 4), -2))
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000148 Decimal('3.14')
Georg Brandl116aa622007-08-15 14:28:22 +0000149 >>> Decimal(str(2.0 ** 0.5))
Alexander Belopolsky287d1fd2011-01-12 16:37:14 +0000150 Decimal('1.4142135623730951')
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000151 >>> Decimal(2) ** Decimal('0.5')
152 Decimal('1.414213562373095048801688724')
153 >>> Decimal('NaN')
154 Decimal('NaN')
155 >>> Decimal('-Infinity')
156 Decimal('-Infinity')
Georg Brandl116aa622007-08-15 14:28:22 +0000157
Stefan Krah1919b7e2012-03-21 18:25:23 +0100158If the :exc:`FloatOperation` signal is trapped, accidental mixing of
159decimals and floats in constructors or ordering comparisons raises
160an exception::
161
162 >>> c = getcontext()
163 >>> c.traps[FloatOperation] = True
164 >>> Decimal(3.14)
165 Traceback (most recent call last):
Martin Panter1050d2d2016-07-26 11:18:21 +0200166 File "<stdin>", line 1, in <module>
Stefan Krah1919b7e2012-03-21 18:25:23 +0100167 decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
168 >>> Decimal('3.5') < 3.7
169 Traceback (most recent call last):
170 File "<stdin>", line 1, in <module>
171 decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
172 >>> Decimal('3.5') == 3.5
173 True
174
175.. versionadded:: 3.3
176
Georg Brandl116aa622007-08-15 14:28:22 +0000177The significance of a new Decimal is determined solely by the number of digits
178input. Context precision and rounding only come into play during arithmetic
Christian Heimesfe337bf2008-03-23 21:54:12 +0000179operations.
180
181.. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +0000182
183 >>> getcontext().prec = 6
184 >>> Decimal('3.0')
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000185 Decimal('3.0')
Georg Brandl116aa622007-08-15 14:28:22 +0000186 >>> Decimal('3.1415926535')
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000187 Decimal('3.1415926535')
Georg Brandl116aa622007-08-15 14:28:22 +0000188 >>> Decimal('3.1415926535') + Decimal('2.7182818285')
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000189 Decimal('5.85987')
Georg Brandl116aa622007-08-15 14:28:22 +0000190 >>> getcontext().rounding = ROUND_UP
191 >>> Decimal('3.1415926535') + Decimal('2.7182818285')
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000192 Decimal('5.85988')
Georg Brandl116aa622007-08-15 14:28:22 +0000193
Stefan Krah1919b7e2012-03-21 18:25:23 +0100194If the internal limits of the C version are exceeded, constructing
195a decimal raises :class:`InvalidOperation`::
196
197 >>> Decimal("1e9999999999999999999")
198 Traceback (most recent call last):
199 File "<stdin>", line 1, in <module>
200 decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
201
202.. versionchanged:: 3.3
203
Georg Brandl116aa622007-08-15 14:28:22 +0000204Decimals interact well with much of the rest of Python. Here is a small decimal
Christian Heimesfe337bf2008-03-23 21:54:12 +0000205floating point flying circus:
206
207.. doctest::
208 :options: +NORMALIZE_WHITESPACE
Georg Brandl116aa622007-08-15 14:28:22 +0000209
Facundo Batista789bdf02008-06-21 17:29:41 +0000210 >>> data = list(map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split()))
Georg Brandl116aa622007-08-15 14:28:22 +0000211 >>> max(data)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000212 Decimal('9.25')
Georg Brandl116aa622007-08-15 14:28:22 +0000213 >>> min(data)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000214 Decimal('0.03')
Georg Brandl116aa622007-08-15 14:28:22 +0000215 >>> sorted(data)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000216 [Decimal('0.03'), Decimal('1.00'), Decimal('1.34'), Decimal('1.87'),
217 Decimal('2.35'), Decimal('3.45'), Decimal('9.25')]
Georg Brandl116aa622007-08-15 14:28:22 +0000218 >>> sum(data)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000219 Decimal('19.29')
Georg Brandl116aa622007-08-15 14:28:22 +0000220 >>> a,b,c = data[:3]
221 >>> str(a)
222 '1.34'
223 >>> float(a)
Mark Dickinson8dad7df2009-06-28 20:36:54 +0000224 1.34
225 >>> round(a, 1)
226 Decimal('1.3')
Georg Brandl116aa622007-08-15 14:28:22 +0000227 >>> int(a)
228 1
229 >>> a * 5
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000230 Decimal('6.70')
Georg Brandl116aa622007-08-15 14:28:22 +0000231 >>> a * b
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000232 Decimal('2.5058')
Georg Brandl116aa622007-08-15 14:28:22 +0000233 >>> c % a
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000234 Decimal('0.77')
Georg Brandl116aa622007-08-15 14:28:22 +0000235
Christian Heimesfe337bf2008-03-23 21:54:12 +0000236And some mathematical functions are also available to Decimal:
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000237
Facundo Batista789bdf02008-06-21 17:29:41 +0000238 >>> getcontext().prec = 28
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000239 >>> Decimal(2).sqrt()
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000240 Decimal('1.414213562373095048801688724')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000241 >>> Decimal(1).exp()
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000242 Decimal('2.718281828459045235360287471')
243 >>> Decimal('10').ln()
244 Decimal('2.302585092994045684017991455')
245 >>> Decimal('10').log10()
246 Decimal('1')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000247
Georg Brandl116aa622007-08-15 14:28:22 +0000248The :meth:`quantize` method rounds a number to a fixed exponent. This method is
249useful for monetary applications that often round results to a fixed number of
Christian Heimesfe337bf2008-03-23 21:54:12 +0000250places:
Georg Brandl116aa622007-08-15 14:28:22 +0000251
252 >>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000253 Decimal('7.32')
Georg Brandl116aa622007-08-15 14:28:22 +0000254 >>> Decimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000255 Decimal('8')
Georg Brandl116aa622007-08-15 14:28:22 +0000256
257As shown above, the :func:`getcontext` function accesses the current context and
258allows the settings to be changed. This approach meets the needs of most
259applications.
260
261For more advanced work, it may be useful to create alternate contexts using the
262Context() constructor. To make an alternate active, use the :func:`setcontext`
263function.
264
Serhiy Storchakab19542d2015-03-14 21:32:57 +0200265In accordance with the standard, the :mod:`decimal` module provides two ready to
Georg Brandl116aa622007-08-15 14:28:22 +0000266use standard contexts, :const:`BasicContext` and :const:`ExtendedContext`. The
267former is especially useful for debugging because many of the traps are
Christian Heimesfe337bf2008-03-23 21:54:12 +0000268enabled:
269
270.. doctest:: newcontext
271 :options: +NORMALIZE_WHITESPACE
Georg Brandl116aa622007-08-15 14:28:22 +0000272
273 >>> myothercontext = Context(prec=60, rounding=ROUND_HALF_DOWN)
274 >>> setcontext(myothercontext)
275 >>> Decimal(1) / Decimal(7)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000276 Decimal('0.142857142857142857142857142857142857142857142857142857142857')
Georg Brandl116aa622007-08-15 14:28:22 +0000277
278 >>> ExtendedContext
Stefan Krah1919b7e2012-03-21 18:25:23 +0100279 Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
Mark Dickinsonb1d8e322010-05-22 18:35:36 +0000280 capitals=1, clamp=0, flags=[], traps=[])
Georg Brandl116aa622007-08-15 14:28:22 +0000281 >>> setcontext(ExtendedContext)
282 >>> Decimal(1) / Decimal(7)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000283 Decimal('0.142857143')
Georg Brandl116aa622007-08-15 14:28:22 +0000284 >>> Decimal(42) / Decimal(0)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000285 Decimal('Infinity')
Georg Brandl116aa622007-08-15 14:28:22 +0000286
287 >>> setcontext(BasicContext)
288 >>> Decimal(42) / Decimal(0)
289 Traceback (most recent call last):
290 File "<pyshell#143>", line 1, in -toplevel-
291 Decimal(42) / Decimal(0)
292 DivisionByZero: x / 0
293
294Contexts also have signal flags for monitoring exceptional conditions
295encountered during computations. The flags remain set until explicitly cleared,
296so it is best to clear the flags before each set of monitored computations by
297using the :meth:`clear_flags` method. ::
298
299 >>> setcontext(ExtendedContext)
300 >>> getcontext().clear_flags()
301 >>> Decimal(355) / Decimal(113)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000302 Decimal('3.14159292')
Georg Brandl116aa622007-08-15 14:28:22 +0000303 >>> getcontext()
Stefan Krah1919b7e2012-03-21 18:25:23 +0100304 Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
Mark Dickinsonb1d8e322010-05-22 18:35:36 +0000305 capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[])
Georg Brandl116aa622007-08-15 14:28:22 +0000306
307The *flags* entry shows that the rational approximation to :const:`Pi` was
308rounded (digits beyond the context precision were thrown away) and that the
309result is inexact (some of the discarded digits were non-zero).
310
311Individual traps are set using the dictionary in the :attr:`traps` field of a
Christian Heimesfe337bf2008-03-23 21:54:12 +0000312context:
Georg Brandl116aa622007-08-15 14:28:22 +0000313
Christian Heimesfe337bf2008-03-23 21:54:12 +0000314.. doctest:: newcontext
315
316 >>> setcontext(ExtendedContext)
Georg Brandl116aa622007-08-15 14:28:22 +0000317 >>> Decimal(1) / Decimal(0)
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000318 Decimal('Infinity')
Georg Brandl116aa622007-08-15 14:28:22 +0000319 >>> getcontext().traps[DivisionByZero] = 1
320 >>> Decimal(1) / Decimal(0)
321 Traceback (most recent call last):
322 File "<pyshell#112>", line 1, in -toplevel-
323 Decimal(1) / Decimal(0)
324 DivisionByZero: x / 0
325
326Most programs adjust the current context only once, at the beginning of the
327program. And, in many applications, data is converted to :class:`Decimal` with
328a single cast inside a loop. With context set and decimals created, the bulk of
329the program manipulates the data no differently than with other Python numeric
330types.
331
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000332.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +0000333
334
335.. _decimal-decimal:
336
337Decimal objects
338---------------
339
340
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000341.. class:: Decimal(value="0", context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000342
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000343 Construct a new :class:`Decimal` object based from *value*.
Georg Brandl116aa622007-08-15 14:28:22 +0000344
Raymond Hettinger96798592010-04-02 16:58:27 +0000345 *value* can be an integer, string, tuple, :class:`float`, or another :class:`Decimal`
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000346 object. If no *value* is given, returns ``Decimal('0')``. If *value* is a
Christian Heimesa62da1d2008-01-12 19:39:10 +0000347 string, it should conform to the decimal numeric string syntax after leading
348 and trailing whitespace characters are removed::
Georg Brandl116aa622007-08-15 14:28:22 +0000349
350 sign ::= '+' | '-'
351 digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
352 indicator ::= 'e' | 'E'
353 digits ::= digit [digit]...
354 decimal-part ::= digits '.' [digits] | ['.'] digits
355 exponent-part ::= indicator [sign] digits
356 infinity ::= 'Infinity' | 'Inf'
357 nan ::= 'NaN' [digits] | 'sNaN' [digits]
358 numeric-value ::= decimal-part [exponent-part] | infinity
Georg Brandl48310cd2009-01-03 21:18:54 +0000359 numeric-string ::= [sign] numeric-value | [sign] nan
Georg Brandl116aa622007-08-15 14:28:22 +0000360
Mark Dickinson345adc42009-08-02 10:14:23 +0000361 Other Unicode decimal digits are also permitted where ``digit``
362 appears above. These include decimal digits from various other
363 alphabets (for example, Arabic-Indic and Devanāgarī digits) along
364 with the fullwidth digits ``'\uff10'`` through ``'\uff19'``.
365
Georg Brandl116aa622007-08-15 14:28:22 +0000366 If *value* is a :class:`tuple`, it should have three components, a sign
367 (:const:`0` for positive or :const:`1` for negative), a :class:`tuple` of
368 digits, and an integer exponent. For example, ``Decimal((0, (1, 4, 1, 4), -3))``
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000369 returns ``Decimal('1.414')``.
Georg Brandl116aa622007-08-15 14:28:22 +0000370
Raymond Hettinger96798592010-04-02 16:58:27 +0000371 If *value* is a :class:`float`, the binary floating point value is losslessly
372 converted to its exact decimal equivalent. This conversion can often require
Mark Dickinsone534a072010-04-04 22:13:14 +0000373 53 or more digits of precision. For example, ``Decimal(float('1.1'))``
374 converts to
375 ``Decimal('1.100000000000000088817841970012523233890533447265625')``.
Raymond Hettinger96798592010-04-02 16:58:27 +0000376
Georg Brandl116aa622007-08-15 14:28:22 +0000377 The *context* precision does not affect how many digits are stored. That is
378 determined exclusively by the number of digits in *value*. For example,
Christian Heimes68f5fbe2008-02-14 08:27:37 +0000379 ``Decimal('3.00000')`` records all five zeros even if the context precision is
Georg Brandl116aa622007-08-15 14:28:22 +0000380 only three.
381
382 The purpose of the *context* argument is determining what to do if *value* is a
383 malformed string. If the context traps :const:`InvalidOperation`, an exception
384 is raised; otherwise, the constructor returns a new Decimal with the value of
385 :const:`NaN`.
386
387 Once constructed, :class:`Decimal` objects are immutable.
388
Mark Dickinsone534a072010-04-04 22:13:14 +0000389 .. versionchanged:: 3.2
Georg Brandl67b21b72010-08-17 15:07:14 +0000390 The argument to the constructor is now permitted to be a :class:`float`
391 instance.
Mark Dickinsone534a072010-04-04 22:13:14 +0000392
Stefan Krah1919b7e2012-03-21 18:25:23 +0100393 .. versionchanged:: 3.3
394 :class:`float` arguments raise an exception if the :exc:`FloatOperation`
395 trap is set. By default the trap is off.
396
Benjamin Petersone41251e2008-04-25 01:59:09 +0000397 Decimal floating point objects share many properties with the other built-in
398 numeric types such as :class:`float` and :class:`int`. All of the usual math
399 operations and special methods apply. Likewise, decimal objects can be
400 copied, pickled, printed, used as dictionary keys, used as set elements,
401 compared, sorted, and coerced to another type (such as :class:`float` or
Mark Dickinson5d233fd2010-02-18 14:54:37 +0000402 :class:`int`).
Christian Heimesa62da1d2008-01-12 19:39:10 +0000403
Mark Dickinsona3f37402012-11-18 10:22:05 +0000404 There are some small differences between arithmetic on Decimal objects and
405 arithmetic on integers and floats. When the remainder operator ``%`` is
406 applied to Decimal objects, the sign of the result is the sign of the
407 *dividend* rather than the sign of the divisor::
408
409 >>> (-7) % 4
410 1
411 >>> Decimal(-7) % Decimal(4)
412 Decimal('-3')
413
414 The integer division operator ``//`` behaves analogously, returning the
415 integer part of the true quotient (truncating towards zero) rather than its
Mark Dickinsonec967242012-11-18 10:42:07 +0000416 floor, so as to preserve the usual identity ``x == (x // y) * y + x % y``::
Mark Dickinsona3f37402012-11-18 10:22:05 +0000417
418 >>> -7 // 4
419 -2
420 >>> Decimal(-7) // Decimal(4)
421 Decimal('-1')
422
423 The ``%`` and ``//`` operators implement the ``remainder`` and
424 ``divide-integer`` operations (respectively) as described in the
425 specification.
426
Mark Dickinson08ade6f2010-06-11 10:44:52 +0000427 Decimal objects cannot generally be combined with floats or
428 instances of :class:`fractions.Fraction` in arithmetic operations:
429 an attempt to add a :class:`Decimal` to a :class:`float`, for
430 example, will raise a :exc:`TypeError`. However, it is possible to
431 use Python's comparison operators to compare a :class:`Decimal`
432 instance ``x`` with another number ``y``. This avoids confusing results
433 when doing equality comparisons between numbers of different types.
Mark Dickinsonac256ab2010-04-03 11:08:14 +0000434
Ezio Melotti993a5ee2010-04-04 06:30:08 +0000435 .. versionchanged:: 3.2
Georg Brandl67b21b72010-08-17 15:07:14 +0000436 Mixed-type comparisons between :class:`Decimal` instances and other
437 numeric types are now fully supported.
Mark Dickinsonac256ab2010-04-03 11:08:14 +0000438
Benjamin Petersone41251e2008-04-25 01:59:09 +0000439 In addition to the standard numeric properties, decimal floating point
440 objects also have a number of specialized methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000441
Georg Brandl116aa622007-08-15 14:28:22 +0000442
Benjamin Petersone41251e2008-04-25 01:59:09 +0000443 .. method:: adjusted()
Georg Brandl116aa622007-08-15 14:28:22 +0000444
Benjamin Petersone41251e2008-04-25 01:59:09 +0000445 Return the adjusted exponent after shifting out the coefficient's
446 rightmost digits until only the lead digit remains:
447 ``Decimal('321e+5').adjusted()`` returns seven. Used for determining the
448 position of the most significant digit with respect to the decimal point.
Georg Brandl116aa622007-08-15 14:28:22 +0000449
Stefan Krah53f2e0a2015-12-28 23:02:02 +0100450 .. method:: as_integer_ratio()
451
452 Return a pair ``(n, d)`` of integers that represent the given
453 :class:`Decimal` instance as a fraction, in lowest terms and
454 with a positive denominator::
455
456 >>> Decimal('-3.14').as_integer_ratio()
457 (-157, 50)
458
459 The conversion is exact. Raise OverflowError on infinities and ValueError
460 on NaNs.
461
462 .. versionadded:: 3.6
Georg Brandl116aa622007-08-15 14:28:22 +0000463
Benjamin Petersone41251e2008-04-25 01:59:09 +0000464 .. method:: as_tuple()
Georg Brandl116aa622007-08-15 14:28:22 +0000465
Benjamin Petersone41251e2008-04-25 01:59:09 +0000466 Return a :term:`named tuple` representation of the number:
467 ``DecimalTuple(sign, digits, exponent)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000468
Christian Heimes25bb7832008-01-11 16:17:00 +0000469
Benjamin Petersone41251e2008-04-25 01:59:09 +0000470 .. method:: canonical()
Georg Brandl116aa622007-08-15 14:28:22 +0000471
Benjamin Petersone41251e2008-04-25 01:59:09 +0000472 Return the canonical encoding of the argument. Currently, the encoding of
473 a :class:`Decimal` instance is always canonical, so this operation returns
474 its argument unchanged.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000475
Stefan Krah040e3112012-12-15 22:33:33 +0100476 .. method:: compare(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000477
Georg Brandl05f5ab72008-09-24 09:11:47 +0000478 Compare the values of two Decimal instances. :meth:`compare` returns a
479 Decimal instance, and if either operand is a NaN then the result is a
480 NaN::
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000481
Georg Brandl05f5ab72008-09-24 09:11:47 +0000482 a or b is a NaN ==> Decimal('NaN')
483 a < b ==> Decimal('-1')
484 a == b ==> Decimal('0')
485 a > b ==> Decimal('1')
Georg Brandl116aa622007-08-15 14:28:22 +0000486
Stefan Krah040e3112012-12-15 22:33:33 +0100487 .. method:: compare_signal(other, context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000488
Benjamin Petersone41251e2008-04-25 01:59:09 +0000489 This operation is identical to the :meth:`compare` method, except that all
490 NaNs signal. That is, if neither operand is a signaling NaN then any
491 quiet NaN operand is treated as though it were a signaling NaN.
Georg Brandl116aa622007-08-15 14:28:22 +0000492
Stefan Krah040e3112012-12-15 22:33:33 +0100493 .. method:: compare_total(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000494
Benjamin Petersone41251e2008-04-25 01:59:09 +0000495 Compare two operands using their abstract representation rather than their
496 numerical value. Similar to the :meth:`compare` method, but the result
497 gives a total ordering on :class:`Decimal` instances. Two
498 :class:`Decimal` instances with the same numeric value but different
499 representations compare unequal in this ordering:
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000500
Benjamin Petersone41251e2008-04-25 01:59:09 +0000501 >>> Decimal('12.0').compare_total(Decimal('12'))
502 Decimal('-1')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000503
Benjamin Petersone41251e2008-04-25 01:59:09 +0000504 Quiet and signaling NaNs are also included in the total ordering. The
505 result of this function is ``Decimal('0')`` if both operands have the same
506 representation, ``Decimal('-1')`` if the first operand is lower in the
507 total order than the second, and ``Decimal('1')`` if the first operand is
508 higher in the total order than the second operand. See the specification
509 for details of the total order.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000510
Stefan Krah040e3112012-12-15 22:33:33 +0100511 This operation is unaffected by context and is quiet: no flags are changed
512 and no rounding is performed. As an exception, the C version may raise
513 InvalidOperation if the second operand cannot be converted exactly.
514
515 .. method:: compare_total_mag(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000516
Benjamin Petersone41251e2008-04-25 01:59:09 +0000517 Compare two operands using their abstract representation rather than their
518 value as in :meth:`compare_total`, but ignoring the sign of each operand.
519 ``x.compare_total_mag(y)`` is equivalent to
520 ``x.copy_abs().compare_total(y.copy_abs())``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000521
Stefan Krah040e3112012-12-15 22:33:33 +0100522 This operation is unaffected by context and is quiet: no flags are changed
523 and no rounding is performed. As an exception, the C version may raise
524 InvalidOperation if the second operand cannot be converted exactly.
525
Facundo Batista789bdf02008-06-21 17:29:41 +0000526 .. method:: conjugate()
527
Benjamin Petersondcf97b92008-07-02 17:30:14 +0000528 Just returns self, this method is only to comply with the Decimal
Facundo Batista789bdf02008-06-21 17:29:41 +0000529 Specification.
530
Benjamin Petersone41251e2008-04-25 01:59:09 +0000531 .. method:: copy_abs()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000532
Benjamin Petersone41251e2008-04-25 01:59:09 +0000533 Return the absolute value of the argument. This operation is unaffected
534 by the context and is quiet: no flags are changed and no rounding is
535 performed.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000536
Benjamin Petersone41251e2008-04-25 01:59:09 +0000537 .. method:: copy_negate()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000538
Benjamin Petersone41251e2008-04-25 01:59:09 +0000539 Return the negation of the argument. This operation is unaffected by the
540 context and is quiet: no flags are changed and no rounding is performed.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000541
Stefan Krah040e3112012-12-15 22:33:33 +0100542 .. method:: copy_sign(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000543
Benjamin Petersone41251e2008-04-25 01:59:09 +0000544 Return a copy of the first operand with the sign set to be the same as the
545 sign of the second operand. For example:
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000546
Benjamin Petersone41251e2008-04-25 01:59:09 +0000547 >>> Decimal('2.3').copy_sign(Decimal('-1.5'))
548 Decimal('-2.3')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000549
Stefan Krah040e3112012-12-15 22:33:33 +0100550 This operation is unaffected by context and is quiet: no flags are changed
551 and no rounding is performed. As an exception, the C version may raise
552 InvalidOperation if the second operand cannot be converted exactly.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000553
Stefan Krah040e3112012-12-15 22:33:33 +0100554 .. method:: exp(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000555
Benjamin Petersone41251e2008-04-25 01:59:09 +0000556 Return the value of the (natural) exponential function ``e**x`` at the
557 given number. The result is correctly rounded using the
558 :const:`ROUND_HALF_EVEN` rounding mode.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000559
Benjamin Petersone41251e2008-04-25 01:59:09 +0000560 >>> Decimal(1).exp()
561 Decimal('2.718281828459045235360287471')
562 >>> Decimal(321).exp()
563 Decimal('2.561702493119680037517373933E+139')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000564
Raymond Hettinger771ed762009-01-03 19:20:32 +0000565 .. method:: from_float(f)
566
567 Classmethod that converts a float to a decimal number, exactly.
568
569 Note `Decimal.from_float(0.1)` is not the same as `Decimal('0.1')`.
570 Since 0.1 is not exactly representable in binary floating point, the
571 value is stored as the nearest representable value which is
572 `0x1.999999999999ap-4`. That equivalent value in decimal is
573 `0.1000000000000000055511151231257827021181583404541015625`.
574
Mark Dickinsone534a072010-04-04 22:13:14 +0000575 .. note:: From Python 3.2 onwards, a :class:`Decimal` instance
576 can also be constructed directly from a :class:`float`.
577
Raymond Hettinger771ed762009-01-03 19:20:32 +0000578 .. doctest::
579
580 >>> Decimal.from_float(0.1)
581 Decimal('0.1000000000000000055511151231257827021181583404541015625')
582 >>> Decimal.from_float(float('nan'))
583 Decimal('NaN')
584 >>> Decimal.from_float(float('inf'))
585 Decimal('Infinity')
586 >>> Decimal.from_float(float('-inf'))
587 Decimal('-Infinity')
588
Georg Brandl45f53372009-01-03 21:15:20 +0000589 .. versionadded:: 3.1
Raymond Hettinger771ed762009-01-03 19:20:32 +0000590
Stefan Krah040e3112012-12-15 22:33:33 +0100591 .. method:: fma(other, third, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000592
Benjamin Petersone41251e2008-04-25 01:59:09 +0000593 Fused multiply-add. Return self*other+third with no rounding of the
594 intermediate product self*other.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000595
Benjamin Petersone41251e2008-04-25 01:59:09 +0000596 >>> Decimal(2).fma(3, 5)
597 Decimal('11')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000598
Benjamin Petersone41251e2008-04-25 01:59:09 +0000599 .. method:: is_canonical()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000600
Benjamin Petersone41251e2008-04-25 01:59:09 +0000601 Return :const:`True` if the argument is canonical and :const:`False`
602 otherwise. Currently, a :class:`Decimal` instance is always canonical, so
603 this operation always returns :const:`True`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000604
Benjamin Petersone41251e2008-04-25 01:59:09 +0000605 .. method:: is_finite()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000606
Benjamin Petersone41251e2008-04-25 01:59:09 +0000607 Return :const:`True` if the argument is a finite number, and
608 :const:`False` if the argument is an infinity or a NaN.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000609
Benjamin Petersone41251e2008-04-25 01:59:09 +0000610 .. method:: is_infinite()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000611
Benjamin Petersone41251e2008-04-25 01:59:09 +0000612 Return :const:`True` if the argument is either positive or negative
613 infinity and :const:`False` otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000614
Benjamin Petersone41251e2008-04-25 01:59:09 +0000615 .. method:: is_nan()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000616
Benjamin Petersone41251e2008-04-25 01:59:09 +0000617 Return :const:`True` if the argument is a (quiet or signaling) NaN and
618 :const:`False` otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000619
Stefan Krah040e3112012-12-15 22:33:33 +0100620 .. method:: is_normal(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000621
Benjamin Petersone41251e2008-04-25 01:59:09 +0000622 Return :const:`True` if the argument is a *normal* finite number. Return
623 :const:`False` if the argument is zero, subnormal, infinite or a NaN.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000624
Benjamin Petersone41251e2008-04-25 01:59:09 +0000625 .. method:: is_qnan()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000626
Benjamin Petersone41251e2008-04-25 01:59:09 +0000627 Return :const:`True` if the argument is a quiet NaN, and
628 :const:`False` otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000629
Benjamin Petersone41251e2008-04-25 01:59:09 +0000630 .. method:: is_signed()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000631
Benjamin Petersone41251e2008-04-25 01:59:09 +0000632 Return :const:`True` if the argument has a negative sign and
633 :const:`False` otherwise. Note that zeros and NaNs can both carry signs.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000634
Benjamin Petersone41251e2008-04-25 01:59:09 +0000635 .. method:: is_snan()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000636
Benjamin Petersone41251e2008-04-25 01:59:09 +0000637 Return :const:`True` if the argument is a signaling NaN and :const:`False`
638 otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000639
Stefan Krah040e3112012-12-15 22:33:33 +0100640 .. method:: is_subnormal(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000641
Benjamin Petersone41251e2008-04-25 01:59:09 +0000642 Return :const:`True` if the argument is subnormal, and :const:`False`
643 otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000644
Benjamin Petersone41251e2008-04-25 01:59:09 +0000645 .. method:: is_zero()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000646
Benjamin Petersone41251e2008-04-25 01:59:09 +0000647 Return :const:`True` if the argument is a (positive or negative) zero and
648 :const:`False` otherwise.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000649
Stefan Krah040e3112012-12-15 22:33:33 +0100650 .. method:: ln(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000651
Benjamin Petersone41251e2008-04-25 01:59:09 +0000652 Return the natural (base e) logarithm of the operand. The result is
653 correctly rounded using the :const:`ROUND_HALF_EVEN` rounding mode.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000654
Stefan Krah040e3112012-12-15 22:33:33 +0100655 .. method:: log10(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000656
Benjamin Petersone41251e2008-04-25 01:59:09 +0000657 Return the base ten logarithm of the operand. The result is correctly
658 rounded using the :const:`ROUND_HALF_EVEN` rounding mode.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000659
Stefan Krah040e3112012-12-15 22:33:33 +0100660 .. method:: logb(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000661
Benjamin Petersone41251e2008-04-25 01:59:09 +0000662 For a nonzero number, return the adjusted exponent of its operand as a
663 :class:`Decimal` instance. If the operand is a zero then
664 ``Decimal('-Infinity')`` is returned and the :const:`DivisionByZero` flag
665 is raised. If the operand is an infinity then ``Decimal('Infinity')`` is
666 returned.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000667
Stefan Krah040e3112012-12-15 22:33:33 +0100668 .. method:: logical_and(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000669
Benjamin Petersone41251e2008-04-25 01:59:09 +0000670 :meth:`logical_and` is a logical operation which takes two *logical
671 operands* (see :ref:`logical_operands_label`). The result is the
672 digit-wise ``and`` of the two operands.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000673
Stefan Krah040e3112012-12-15 22:33:33 +0100674 .. method:: logical_invert(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000675
Alexandre Vassalotti260484d2009-07-17 11:43:26 +0000676 :meth:`logical_invert` is a logical operation. The
Benjamin Petersone41251e2008-04-25 01:59:09 +0000677 result is the digit-wise inversion of the operand.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000678
Stefan Krah040e3112012-12-15 22:33:33 +0100679 .. method:: logical_or(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000680
Benjamin Petersone41251e2008-04-25 01:59:09 +0000681 :meth:`logical_or` is a logical operation which takes two *logical
682 operands* (see :ref:`logical_operands_label`). The result is the
683 digit-wise ``or`` of the two operands.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000684
Stefan Krah040e3112012-12-15 22:33:33 +0100685 .. method:: logical_xor(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000686
Benjamin Petersone41251e2008-04-25 01:59:09 +0000687 :meth:`logical_xor` is a logical operation which takes two *logical
688 operands* (see :ref:`logical_operands_label`). The result is the
689 digit-wise exclusive or of the two operands.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000690
Stefan Krah040e3112012-12-15 22:33:33 +0100691 .. method:: max(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000692
Benjamin Petersone41251e2008-04-25 01:59:09 +0000693 Like ``max(self, other)`` except that the context rounding rule is applied
694 before returning and that :const:`NaN` values are either signaled or
695 ignored (depending on the context and whether they are signaling or
696 quiet).
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000697
Stefan Krah040e3112012-12-15 22:33:33 +0100698 .. method:: max_mag(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000699
Georg Brandl502d9a52009-07-26 15:02:41 +0000700 Similar to the :meth:`.max` method, but the comparison is done using the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000701 absolute values of the operands.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000702
Stefan Krah040e3112012-12-15 22:33:33 +0100703 .. method:: min(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000704
Benjamin Petersone41251e2008-04-25 01:59:09 +0000705 Like ``min(self, other)`` except that the context rounding rule is applied
706 before returning and that :const:`NaN` values are either signaled or
707 ignored (depending on the context and whether they are signaling or
708 quiet).
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000709
Stefan Krah040e3112012-12-15 22:33:33 +0100710 .. method:: min_mag(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000711
Georg Brandl502d9a52009-07-26 15:02:41 +0000712 Similar to the :meth:`.min` method, but the comparison is done using the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000713 absolute values of the operands.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000714
Stefan Krah040e3112012-12-15 22:33:33 +0100715 .. method:: next_minus(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000716
Benjamin Petersone41251e2008-04-25 01:59:09 +0000717 Return the largest number representable in the given context (or in the
718 current thread's context if no context is given) that is smaller than the
719 given operand.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000720
Stefan Krah040e3112012-12-15 22:33:33 +0100721 .. method:: next_plus(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000722
Benjamin Petersone41251e2008-04-25 01:59:09 +0000723 Return the smallest number representable in the given context (or in the
724 current thread's context if no context is given) that is larger than the
725 given operand.
Georg Brandl116aa622007-08-15 14:28:22 +0000726
Stefan Krah040e3112012-12-15 22:33:33 +0100727 .. method:: next_toward(other, context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000728
Benjamin Petersone41251e2008-04-25 01:59:09 +0000729 If the two operands are unequal, return the number closest to the first
730 operand in the direction of the second operand. If both operands are
731 numerically equal, return a copy of the first operand with the sign set to
732 be the same as the sign of the second operand.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000733
Stefan Krah040e3112012-12-15 22:33:33 +0100734 .. method:: normalize(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000735
Benjamin Petersone41251e2008-04-25 01:59:09 +0000736 Normalize the number by stripping the rightmost trailing zeros and
737 converting any result equal to :const:`Decimal('0')` to
Senthil Kumarana6bac952011-07-04 11:28:30 -0700738 :const:`Decimal('0e0')`. Used for producing canonical values for attributes
Benjamin Petersone41251e2008-04-25 01:59:09 +0000739 of an equivalence class. For example, ``Decimal('32.100')`` and
740 ``Decimal('0.321000e+2')`` both normalize to the equivalent value
741 ``Decimal('32.1')``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000742
Stefan Krah040e3112012-12-15 22:33:33 +0100743 .. method:: number_class(context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000744
Benjamin Petersone41251e2008-04-25 01:59:09 +0000745 Return a string describing the *class* of the operand. The returned value
746 is one of the following ten strings.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000747
Benjamin Petersone41251e2008-04-25 01:59:09 +0000748 * ``"-Infinity"``, indicating that the operand is negative infinity.
749 * ``"-Normal"``, indicating that the operand is a negative normal number.
750 * ``"-Subnormal"``, indicating that the operand is negative and subnormal.
751 * ``"-Zero"``, indicating that the operand is a negative zero.
752 * ``"+Zero"``, indicating that the operand is a positive zero.
753 * ``"+Subnormal"``, indicating that the operand is positive and subnormal.
754 * ``"+Normal"``, indicating that the operand is a positive normal number.
755 * ``"+Infinity"``, indicating that the operand is positive infinity.
756 * ``"NaN"``, indicating that the operand is a quiet NaN (Not a Number).
757 * ``"sNaN"``, indicating that the operand is a signaling NaN.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000758
Stefan Krahb151f8f2014-04-30 19:15:38 +0200759 .. method:: quantize(exp, rounding=None, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000760
Benjamin Petersone41251e2008-04-25 01:59:09 +0000761 Return a value equal to the first operand after rounding and having the
762 exponent of the second operand.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000763
Benjamin Petersone41251e2008-04-25 01:59:09 +0000764 >>> Decimal('1.41421356').quantize(Decimal('1.000'))
765 Decimal('1.414')
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000766
Benjamin Petersone41251e2008-04-25 01:59:09 +0000767 Unlike other operations, if the length of the coefficient after the
768 quantize operation would be greater than precision, then an
769 :const:`InvalidOperation` is signaled. This guarantees that, unless there
770 is an error condition, the quantized exponent is always equal to that of
771 the right-hand operand.
Georg Brandl116aa622007-08-15 14:28:22 +0000772
Benjamin Petersone41251e2008-04-25 01:59:09 +0000773 Also unlike other operations, quantize never signals Underflow, even if
774 the result is subnormal and inexact.
Georg Brandl116aa622007-08-15 14:28:22 +0000775
Benjamin Petersone41251e2008-04-25 01:59:09 +0000776 If the exponent of the second operand is larger than that of the first
777 then rounding may be necessary. In this case, the rounding mode is
778 determined by the ``rounding`` argument if given, else by the given
779 ``context`` argument; if neither argument is given the rounding mode of
780 the current thread's context is used.
Georg Brandl116aa622007-08-15 14:28:22 +0000781
Stefan Krahb151f8f2014-04-30 19:15:38 +0200782 An error is returned whenever the resulting exponent is greater than
783 :attr:`Emax` or less than :attr:`Etiny`.
Stefan Krahaf3f3a72012-08-30 12:33:55 +0200784
Benjamin Petersone41251e2008-04-25 01:59:09 +0000785 .. method:: radix()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000786
Benjamin Petersone41251e2008-04-25 01:59:09 +0000787 Return ``Decimal(10)``, the radix (base) in which the :class:`Decimal`
788 class does all its arithmetic. Included for compatibility with the
789 specification.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000790
Stefan Krah040e3112012-12-15 22:33:33 +0100791 .. method:: remainder_near(other, context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000792
Mark Dickinson6ae568b2012-10-31 19:44:36 +0000793 Return the remainder from dividing *self* by *other*. This differs from
794 ``self % other`` in that the sign of the remainder is chosen so as to
795 minimize its absolute value. More precisely, the return value is
796 ``self - n * other`` where ``n`` is the integer nearest to the exact
797 value of ``self / other``, and if two integers are equally near then the
798 even one is chosen.
Georg Brandl116aa622007-08-15 14:28:22 +0000799
Mark Dickinson6ae568b2012-10-31 19:44:36 +0000800 If the result is zero then its sign will be the sign of *self*.
801
802 >>> Decimal(18).remainder_near(Decimal(10))
803 Decimal('-2')
804 >>> Decimal(25).remainder_near(Decimal(10))
805 Decimal('5')
806 >>> Decimal(35).remainder_near(Decimal(10))
807 Decimal('-5')
Georg Brandl116aa622007-08-15 14:28:22 +0000808
Stefan Krah040e3112012-12-15 22:33:33 +0100809 .. method:: rotate(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000810
Benjamin Petersone41251e2008-04-25 01:59:09 +0000811 Return the result of rotating the digits of the first operand by an amount
812 specified by the second operand. The second operand must be an integer in
813 the range -precision through precision. The absolute value of the second
814 operand gives the number of places to rotate. If the second operand is
815 positive then rotation is to the left; otherwise rotation is to the right.
816 The coefficient of the first operand is padded on the left with zeros to
817 length precision if necessary. The sign and exponent of the first operand
818 are unchanged.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000819
Stefan Krah040e3112012-12-15 22:33:33 +0100820 .. method:: same_quantum(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000821
Benjamin Petersone41251e2008-04-25 01:59:09 +0000822 Test whether self and other have the same exponent or whether both are
823 :const:`NaN`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000824
Stefan Krah040e3112012-12-15 22:33:33 +0100825 This operation is unaffected by context and is quiet: no flags are changed
826 and no rounding is performed. As an exception, the C version may raise
827 InvalidOperation if the second operand cannot be converted exactly.
828
829 .. method:: scaleb(other, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000830
Benjamin Petersone41251e2008-04-25 01:59:09 +0000831 Return the first operand with exponent adjusted by the second.
832 Equivalently, return the first operand multiplied by ``10**other``. The
833 second operand must be an integer.
Georg Brandl116aa622007-08-15 14:28:22 +0000834
Stefan Krah040e3112012-12-15 22:33:33 +0100835 .. method:: shift(other, context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000836
Benjamin Petersone41251e2008-04-25 01:59:09 +0000837 Return the result of shifting the digits of the first operand by an amount
838 specified by the second operand. The second operand must be an integer in
839 the range -precision through precision. The absolute value of the second
840 operand gives the number of places to shift. If the second operand is
841 positive then the shift is to the left; otherwise the shift is to the
842 right. Digits shifted into the coefficient are zeros. The sign and
843 exponent of the first operand are unchanged.
Georg Brandl116aa622007-08-15 14:28:22 +0000844
Stefan Krah040e3112012-12-15 22:33:33 +0100845 .. method:: sqrt(context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000846
Benjamin Petersone41251e2008-04-25 01:59:09 +0000847 Return the square root of the argument to full precision.
Georg Brandl116aa622007-08-15 14:28:22 +0000848
Georg Brandl116aa622007-08-15 14:28:22 +0000849
Stefan Krah040e3112012-12-15 22:33:33 +0100850 .. method:: to_eng_string(context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000851
Raymond Hettingerf6ffa982016-08-13 11:15:34 -0700852 Convert to a string, using engineering notation if an exponent is needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000853
Raymond Hettingerf6ffa982016-08-13 11:15:34 -0700854 Engineering notation has an exponent which is a multiple of 3. This
855 can leave up to 3 digits to the left of the decimal place and may
856 require the addition of either one or two trailing zeros.
857
858 For example, this converts ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000859
Stefan Krah040e3112012-12-15 22:33:33 +0100860 .. method:: to_integral(rounding=None, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000861
Benjamin Petersone41251e2008-04-25 01:59:09 +0000862 Identical to the :meth:`to_integral_value` method. The ``to_integral``
863 name has been kept for compatibility with older versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000864
Stefan Krah040e3112012-12-15 22:33:33 +0100865 .. method:: to_integral_exact(rounding=None, context=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000866
Benjamin Petersone41251e2008-04-25 01:59:09 +0000867 Round to the nearest integer, signaling :const:`Inexact` or
868 :const:`Rounded` as appropriate if rounding occurs. The rounding mode is
869 determined by the ``rounding`` parameter if given, else by the given
870 ``context``. If neither parameter is given then the rounding mode of the
871 current context is used.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000872
Stefan Krah040e3112012-12-15 22:33:33 +0100873 .. method:: to_integral_value(rounding=None, context=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000874
Benjamin Petersone41251e2008-04-25 01:59:09 +0000875 Round to the nearest integer without signaling :const:`Inexact` or
876 :const:`Rounded`. If given, applies *rounding*; otherwise, uses the
877 rounding method in either the supplied *context* or the current context.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000878
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000879
880.. _logical_operands_label:
881
882Logical operands
883^^^^^^^^^^^^^^^^
884
885The :meth:`logical_and`, :meth:`logical_invert`, :meth:`logical_or`,
886and :meth:`logical_xor` methods expect their arguments to be *logical
887operands*. A *logical operand* is a :class:`Decimal` instance whose
888exponent and sign are both zero, and whose digits are all either
889:const:`0` or :const:`1`.
890
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000891.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +0000892
893
894.. _decimal-context:
895
896Context objects
897---------------
898
899Contexts are environments for arithmetic operations. They govern precision, set
900rules for rounding, determine which signals are treated as exceptions, and limit
901the range for exponents.
902
903Each thread has its own current context which is accessed or changed using the
904:func:`getcontext` and :func:`setcontext` functions:
905
906
907.. function:: getcontext()
908
909 Return the current context for the active thread.
910
911
912.. function:: setcontext(c)
913
914 Set the current context for the active thread to *c*.
915
Georg Brandle6bcc912008-05-12 18:05:20 +0000916You can also use the :keyword:`with` statement and the :func:`localcontext`
917function to temporarily change the active context.
Georg Brandl116aa622007-08-15 14:28:22 +0000918
Stefan Krah040e3112012-12-15 22:33:33 +0100919.. function:: localcontext(ctx=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000920
921 Return a context manager that will set the current context for the active thread
Stefan Krah040e3112012-12-15 22:33:33 +0100922 to a copy of *ctx* on entry to the with-statement and restore the previous context
Georg Brandl116aa622007-08-15 14:28:22 +0000923 when exiting the with-statement. If no context is specified, a copy of the
924 current context is used.
925
Georg Brandl116aa622007-08-15 14:28:22 +0000926 For example, the following code sets the current decimal precision to 42 places,
927 performs a calculation, and then automatically restores the previous context::
928
Georg Brandl116aa622007-08-15 14:28:22 +0000929 from decimal import localcontext
930
931 with localcontext() as ctx:
932 ctx.prec = 42 # Perform a high precision calculation
933 s = calculate_something()
934 s = +s # Round the final result back to the default precision
935
936New contexts can also be created using the :class:`Context` constructor
937described below. In addition, the module provides three pre-made contexts:
938
939
940.. class:: BasicContext
941
942 This is a standard context defined by the General Decimal Arithmetic
943 Specification. Precision is set to nine. Rounding is set to
944 :const:`ROUND_HALF_UP`. All flags are cleared. All traps are enabled (treated
945 as exceptions) except :const:`Inexact`, :const:`Rounded`, and
946 :const:`Subnormal`.
947
948 Because many of the traps are enabled, this context is useful for debugging.
949
950
951.. class:: ExtendedContext
952
953 This is a standard context defined by the General Decimal Arithmetic
954 Specification. Precision is set to nine. Rounding is set to
955 :const:`ROUND_HALF_EVEN`. All flags are cleared. No traps are enabled (so that
956 exceptions are not raised during computations).
957
Christian Heimes3feef612008-02-11 06:19:17 +0000958 Because the traps are disabled, this context is useful for applications that
Georg Brandl116aa622007-08-15 14:28:22 +0000959 prefer to have result value of :const:`NaN` or :const:`Infinity` instead of
960 raising exceptions. This allows an application to complete a run in the
961 presence of conditions that would otherwise halt the program.
962
963
964.. class:: DefaultContext
965
966 This context is used by the :class:`Context` constructor as a prototype for new
967 contexts. Changing a field (such a precision) has the effect of changing the
Stefan Kraha1193932010-05-29 12:59:18 +0000968 default for new contexts created by the :class:`Context` constructor.
Georg Brandl116aa622007-08-15 14:28:22 +0000969
970 This context is most useful in multi-threaded environments. Changing one of the
971 fields before threads are started has the effect of setting system-wide
972 defaults. Changing the fields after threads have started is not recommended as
973 it would require thread synchronization to prevent race conditions.
974
975 In single threaded environments, it is preferable to not use this context at
976 all. Instead, simply create contexts explicitly as described below.
977
Stefan Krah1919b7e2012-03-21 18:25:23 +0100978 The default values are :attr:`prec`\ =\ :const:`28`,
979 :attr:`rounding`\ =\ :const:`ROUND_HALF_EVEN`,
980 and enabled traps for :class:`Overflow`, :class:`InvalidOperation`, and
981 :class:`DivisionByZero`.
Georg Brandl116aa622007-08-15 14:28:22 +0000982
983In addition to the three supplied contexts, new contexts can be created with the
984:class:`Context` constructor.
985
986
Stefan Krah1919b7e2012-03-21 18:25:23 +0100987.. class:: Context(prec=None, rounding=None, Emin=None, Emax=None, capitals=None, clamp=None, flags=None, traps=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000988
989 Creates a new context. If a field is not specified or is :const:`None`, the
990 default values are copied from the :const:`DefaultContext`. If the *flags*
991 field is not specified or is :const:`None`, all flags are cleared.
992
Stefan Krah1919b7e2012-03-21 18:25:23 +0100993 *prec* is an integer in the range [:const:`1`, :const:`MAX_PREC`] that sets
994 the precision for arithmetic operations in the context.
Georg Brandl116aa622007-08-15 14:28:22 +0000995
Stefan Krah1919b7e2012-03-21 18:25:23 +0100996 The *rounding* option is one of the constants listed in the section
997 `Rounding Modes`_.
Georg Brandl116aa622007-08-15 14:28:22 +0000998
999 The *traps* and *flags* fields list any signals to be set. Generally, new
1000 contexts should only set traps and leave the flags clear.
1001
1002 The *Emin* and *Emax* fields are integers specifying the outer limits allowable
Stefan Krah1919b7e2012-03-21 18:25:23 +01001003 for exponents. *Emin* must be in the range [:const:`MIN_EMIN`, :const:`0`],
1004 *Emax* in the range [:const:`0`, :const:`MAX_EMAX`].
Georg Brandl116aa622007-08-15 14:28:22 +00001005
1006 The *capitals* field is either :const:`0` or :const:`1` (the default). If set to
1007 :const:`1`, exponents are printed with a capital :const:`E`; otherwise, a
1008 lowercase :const:`e` is used: :const:`Decimal('6.02e+23')`.
1009
Mark Dickinsonb1d8e322010-05-22 18:35:36 +00001010 The *clamp* field is either :const:`0` (the default) or :const:`1`.
1011 If set to :const:`1`, the exponent ``e`` of a :class:`Decimal`
1012 instance representable in this context is strictly limited to the
1013 range ``Emin - prec + 1 <= e <= Emax - prec + 1``. If *clamp* is
1014 :const:`0` then a weaker condition holds: the adjusted exponent of
1015 the :class:`Decimal` instance is at most ``Emax``. When *clamp* is
1016 :const:`1`, a large normal number will, where possible, have its
1017 exponent reduced and a corresponding number of zeros added to its
1018 coefficient, in order to fit the exponent constraints; this
1019 preserves the value of the number but loses information about
1020 significant trailing zeros. For example::
1021
1022 >>> Context(prec=6, Emax=999, clamp=1).create_decimal('1.23e999')
1023 Decimal('1.23000E+999')
1024
1025 A *clamp* value of :const:`1` allows compatibility with the
1026 fixed-width decimal interchange formats specified in IEEE 754.
Georg Brandl116aa622007-08-15 14:28:22 +00001027
Benjamin Petersone41251e2008-04-25 01:59:09 +00001028 The :class:`Context` class defines several general purpose methods as well as
1029 a large number of methods for doing arithmetic directly in a given context.
1030 In addition, for each of the :class:`Decimal` methods described above (with
1031 the exception of the :meth:`adjusted` and :meth:`as_tuple` methods) there is
Mark Dickinson84230a12010-02-18 14:49:50 +00001032 a corresponding :class:`Context` method. For example, for a :class:`Context`
1033 instance ``C`` and :class:`Decimal` instance ``x``, ``C.exp(x)`` is
1034 equivalent to ``x.exp(context=C)``. Each :class:`Context` method accepts a
Mark Dickinson5d233fd2010-02-18 14:54:37 +00001035 Python integer (an instance of :class:`int`) anywhere that a
Mark Dickinson84230a12010-02-18 14:49:50 +00001036 Decimal instance is accepted.
Georg Brandl116aa622007-08-15 14:28:22 +00001037
1038
Benjamin Petersone41251e2008-04-25 01:59:09 +00001039 .. method:: clear_flags()
Georg Brandl116aa622007-08-15 14:28:22 +00001040
Benjamin Petersone41251e2008-04-25 01:59:09 +00001041 Resets all of the flags to :const:`0`.
Georg Brandl116aa622007-08-15 14:28:22 +00001042
Stefan Krah1919b7e2012-03-21 18:25:23 +01001043 .. method:: clear_traps()
1044
1045 Resets all of the traps to :const:`0`.
1046
1047 .. versionadded:: 3.3
1048
Benjamin Petersone41251e2008-04-25 01:59:09 +00001049 .. method:: copy()
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001050
Benjamin Petersone41251e2008-04-25 01:59:09 +00001051 Return a duplicate of the context.
Georg Brandl116aa622007-08-15 14:28:22 +00001052
Benjamin Petersone41251e2008-04-25 01:59:09 +00001053 .. method:: copy_decimal(num)
Georg Brandl116aa622007-08-15 14:28:22 +00001054
Benjamin Petersone41251e2008-04-25 01:59:09 +00001055 Return a copy of the Decimal instance num.
Georg Brandl116aa622007-08-15 14:28:22 +00001056
Benjamin Petersone41251e2008-04-25 01:59:09 +00001057 .. method:: create_decimal(num)
Christian Heimesfe337bf2008-03-23 21:54:12 +00001058
Benjamin Petersone41251e2008-04-25 01:59:09 +00001059 Creates a new Decimal instance from *num* but using *self* as
1060 context. Unlike the :class:`Decimal` constructor, the context precision,
1061 rounding method, flags, and traps are applied to the conversion.
Georg Brandl116aa622007-08-15 14:28:22 +00001062
Benjamin Petersone41251e2008-04-25 01:59:09 +00001063 This is useful because constants are often given to a greater precision
1064 than is needed by the application. Another benefit is that rounding
1065 immediately eliminates unintended effects from digits beyond the current
1066 precision. In the following example, using unrounded inputs means that
1067 adding zero to a sum can change the result:
Georg Brandl116aa622007-08-15 14:28:22 +00001068
Benjamin Petersone41251e2008-04-25 01:59:09 +00001069 .. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +00001070
Benjamin Petersone41251e2008-04-25 01:59:09 +00001071 >>> getcontext().prec = 3
1072 >>> Decimal('3.4445') + Decimal('1.0023')
1073 Decimal('4.45')
1074 >>> Decimal('3.4445') + Decimal(0) + Decimal('1.0023')
1075 Decimal('4.44')
Georg Brandl116aa622007-08-15 14:28:22 +00001076
Benjamin Petersone41251e2008-04-25 01:59:09 +00001077 This method implements the to-number operation of the IBM specification.
1078 If the argument is a string, no leading or trailing whitespace is
1079 permitted.
1080
Georg Brandl45f53372009-01-03 21:15:20 +00001081 .. method:: create_decimal_from_float(f)
Raymond Hettinger771ed762009-01-03 19:20:32 +00001082
1083 Creates a new Decimal instance from a float *f* but rounding using *self*
Georg Brandl45f53372009-01-03 21:15:20 +00001084 as the context. Unlike the :meth:`Decimal.from_float` class method,
Raymond Hettinger771ed762009-01-03 19:20:32 +00001085 the context precision, rounding method, flags, and traps are applied to
1086 the conversion.
1087
1088 .. doctest::
1089
Georg Brandl45f53372009-01-03 21:15:20 +00001090 >>> context = Context(prec=5, rounding=ROUND_DOWN)
1091 >>> context.create_decimal_from_float(math.pi)
1092 Decimal('3.1415')
1093 >>> context = Context(prec=5, traps=[Inexact])
1094 >>> context.create_decimal_from_float(math.pi)
1095 Traceback (most recent call last):
1096 ...
1097 decimal.Inexact: None
Raymond Hettinger771ed762009-01-03 19:20:32 +00001098
Georg Brandl45f53372009-01-03 21:15:20 +00001099 .. versionadded:: 3.1
Raymond Hettinger771ed762009-01-03 19:20:32 +00001100
Benjamin Petersone41251e2008-04-25 01:59:09 +00001101 .. method:: Etiny()
1102
1103 Returns a value equal to ``Emin - prec + 1`` which is the minimum exponent
1104 value for subnormal results. When underflow occurs, the exponent is set
1105 to :const:`Etiny`.
Georg Brandl116aa622007-08-15 14:28:22 +00001106
Benjamin Petersone41251e2008-04-25 01:59:09 +00001107 .. method:: Etop()
Georg Brandl116aa622007-08-15 14:28:22 +00001108
Benjamin Petersone41251e2008-04-25 01:59:09 +00001109 Returns a value equal to ``Emax - prec + 1``.
Georg Brandl116aa622007-08-15 14:28:22 +00001110
Benjamin Petersone41251e2008-04-25 01:59:09 +00001111 The usual approach to working with decimals is to create :class:`Decimal`
1112 instances and then apply arithmetic operations which take place within the
1113 current context for the active thread. An alternative approach is to use
1114 context methods for calculating within a specific context. The methods are
1115 similar to those for the :class:`Decimal` class and are only briefly
1116 recounted here.
Georg Brandl116aa622007-08-15 14:28:22 +00001117
1118
Benjamin Petersone41251e2008-04-25 01:59:09 +00001119 .. method:: abs(x)
Georg Brandl116aa622007-08-15 14:28:22 +00001120
Benjamin Petersone41251e2008-04-25 01:59:09 +00001121 Returns the absolute value of *x*.
Georg Brandl116aa622007-08-15 14:28:22 +00001122
1123
Benjamin Petersone41251e2008-04-25 01:59:09 +00001124 .. method:: add(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001125
Benjamin Petersone41251e2008-04-25 01:59:09 +00001126 Return the sum of *x* and *y*.
Georg Brandl116aa622007-08-15 14:28:22 +00001127
1128
Facundo Batista789bdf02008-06-21 17:29:41 +00001129 .. method:: canonical(x)
1130
1131 Returns the same Decimal object *x*.
1132
1133
1134 .. method:: compare(x, y)
1135
1136 Compares *x* and *y* numerically.
1137
1138
1139 .. method:: compare_signal(x, y)
1140
1141 Compares the values of the two operands numerically.
1142
1143
1144 .. method:: compare_total(x, y)
1145
1146 Compares two operands using their abstract representation.
1147
1148
1149 .. method:: compare_total_mag(x, y)
1150
1151 Compares two operands using their abstract representation, ignoring sign.
1152
1153
1154 .. method:: copy_abs(x)
1155
1156 Returns a copy of *x* with the sign set to 0.
1157
1158
1159 .. method:: copy_negate(x)
1160
1161 Returns a copy of *x* with the sign inverted.
1162
1163
1164 .. method:: copy_sign(x, y)
1165
1166 Copies the sign from *y* to *x*.
1167
1168
Benjamin Petersone41251e2008-04-25 01:59:09 +00001169 .. method:: divide(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001170
Benjamin Petersone41251e2008-04-25 01:59:09 +00001171 Return *x* divided by *y*.
Georg Brandl116aa622007-08-15 14:28:22 +00001172
1173
Benjamin Petersone41251e2008-04-25 01:59:09 +00001174 .. method:: divide_int(x, y)
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001175
Benjamin Petersone41251e2008-04-25 01:59:09 +00001176 Return *x* divided by *y*, truncated to an integer.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001177
1178
Benjamin Petersone41251e2008-04-25 01:59:09 +00001179 .. method:: divmod(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001180
Benjamin Petersone41251e2008-04-25 01:59:09 +00001181 Divides two numbers and returns the integer part of the result.
Georg Brandl116aa622007-08-15 14:28:22 +00001182
1183
Facundo Batista789bdf02008-06-21 17:29:41 +00001184 .. method:: exp(x)
1185
1186 Returns `e ** x`.
1187
1188
1189 .. method:: fma(x, y, z)
1190
1191 Returns *x* multiplied by *y*, plus *z*.
1192
1193
1194 .. method:: is_canonical(x)
1195
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001196 Returns ``True`` if *x* is canonical; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001197
1198
1199 .. method:: is_finite(x)
1200
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001201 Returns ``True`` if *x* is finite; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001202
1203
1204 .. method:: is_infinite(x)
1205
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001206 Returns ``True`` if *x* is infinite; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001207
1208
1209 .. method:: is_nan(x)
1210
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001211 Returns ``True`` if *x* is a qNaN or sNaN; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001212
1213
1214 .. method:: is_normal(x)
1215
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001216 Returns ``True`` if *x* is a normal number; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001217
1218
1219 .. method:: is_qnan(x)
1220
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001221 Returns ``True`` if *x* is a quiet NaN; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001222
1223
1224 .. method:: is_signed(x)
1225
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001226 Returns ``True`` if *x* is negative; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001227
1228
1229 .. method:: is_snan(x)
1230
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001231 Returns ``True`` if *x* is a signaling NaN; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001232
1233
1234 .. method:: is_subnormal(x)
1235
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001236 Returns ``True`` if *x* is subnormal; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001237
1238
1239 .. method:: is_zero(x)
1240
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001241 Returns ``True`` if *x* is a zero; otherwise returns ``False``.
Facundo Batista789bdf02008-06-21 17:29:41 +00001242
1243
1244 .. method:: ln(x)
1245
1246 Returns the natural (base e) logarithm of *x*.
1247
1248
1249 .. method:: log10(x)
1250
1251 Returns the base 10 logarithm of *x*.
1252
1253
1254 .. method:: logb(x)
1255
1256 Returns the exponent of the magnitude of the operand's MSD.
1257
1258
1259 .. method:: logical_and(x, y)
1260
Georg Brandl36ab1ef2009-01-03 21:17:04 +00001261 Applies the logical operation *and* between each operand's digits.
Facundo Batista789bdf02008-06-21 17:29:41 +00001262
1263
1264 .. method:: logical_invert(x)
1265
1266 Invert all the digits in *x*.
1267
1268
1269 .. method:: logical_or(x, y)
1270
Georg Brandl36ab1ef2009-01-03 21:17:04 +00001271 Applies the logical operation *or* between each operand's digits.
Facundo Batista789bdf02008-06-21 17:29:41 +00001272
1273
1274 .. method:: logical_xor(x, y)
1275
Georg Brandl36ab1ef2009-01-03 21:17:04 +00001276 Applies the logical operation *xor* between each operand's digits.
Facundo Batista789bdf02008-06-21 17:29:41 +00001277
1278
1279 .. method:: max(x, y)
1280
1281 Compares two values numerically and returns the maximum.
1282
1283
1284 .. method:: max_mag(x, y)
1285
1286 Compares the values numerically with their sign ignored.
1287
1288
1289 .. method:: min(x, y)
1290
1291 Compares two values numerically and returns the minimum.
1292
1293
1294 .. method:: min_mag(x, y)
1295
1296 Compares the values numerically with their sign ignored.
1297
1298
Benjamin Petersone41251e2008-04-25 01:59:09 +00001299 .. method:: minus(x)
Georg Brandl116aa622007-08-15 14:28:22 +00001300
Benjamin Petersone41251e2008-04-25 01:59:09 +00001301 Minus corresponds to the unary prefix minus operator in Python.
Georg Brandl116aa622007-08-15 14:28:22 +00001302
1303
Benjamin Petersone41251e2008-04-25 01:59:09 +00001304 .. method:: multiply(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001305
Benjamin Petersone41251e2008-04-25 01:59:09 +00001306 Return the product of *x* and *y*.
Georg Brandl116aa622007-08-15 14:28:22 +00001307
1308
Facundo Batista789bdf02008-06-21 17:29:41 +00001309 .. method:: next_minus(x)
1310
1311 Returns the largest representable number smaller than *x*.
1312
1313
1314 .. method:: next_plus(x)
1315
1316 Returns the smallest representable number larger than *x*.
1317
1318
1319 .. method:: next_toward(x, y)
1320
1321 Returns the number closest to *x*, in direction towards *y*.
1322
1323
1324 .. method:: normalize(x)
1325
1326 Reduces *x* to its simplest form.
1327
1328
1329 .. method:: number_class(x)
1330
1331 Returns an indication of the class of *x*.
1332
1333
Benjamin Petersone41251e2008-04-25 01:59:09 +00001334 .. method:: plus(x)
Georg Brandl116aa622007-08-15 14:28:22 +00001335
Benjamin Petersone41251e2008-04-25 01:59:09 +00001336 Plus corresponds to the unary prefix plus operator in Python. This
1337 operation applies the context precision and rounding, so it is *not* an
1338 identity operation.
Georg Brandl116aa622007-08-15 14:28:22 +00001339
1340
Stefan Krah040e3112012-12-15 22:33:33 +01001341 .. method:: power(x, y, modulo=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001342
Benjamin Petersone41251e2008-04-25 01:59:09 +00001343 Return ``x`` to the power of ``y``, reduced modulo ``modulo`` if given.
Georg Brandl116aa622007-08-15 14:28:22 +00001344
Benjamin Petersone41251e2008-04-25 01:59:09 +00001345 With two arguments, compute ``x**y``. If ``x`` is negative then ``y``
1346 must be integral. The result will be inexact unless ``y`` is integral and
1347 the result is finite and can be expressed exactly in 'precision' digits.
Stefan Krah1919b7e2012-03-21 18:25:23 +01001348 The rounding mode of the context is used. Results are always correctly-rounded
1349 in the Python version.
1350
1351 .. versionchanged:: 3.3
1352 The C module computes :meth:`power` in terms of the correctly-rounded
1353 :meth:`exp` and :meth:`ln` functions. The result is well-defined but
1354 only "almost always correctly-rounded".
Georg Brandl116aa622007-08-15 14:28:22 +00001355
Benjamin Petersone41251e2008-04-25 01:59:09 +00001356 With three arguments, compute ``(x**y) % modulo``. For the three argument
1357 form, the following restrictions on the arguments hold:
Georg Brandl116aa622007-08-15 14:28:22 +00001358
Benjamin Petersone41251e2008-04-25 01:59:09 +00001359 - all three arguments must be integral
1360 - ``y`` must be nonnegative
1361 - at least one of ``x`` or ``y`` must be nonzero
1362 - ``modulo`` must be nonzero and have at most 'precision' digits
Georg Brandl116aa622007-08-15 14:28:22 +00001363
Mark Dickinson5961b0e2010-02-22 15:41:48 +00001364 The value resulting from ``Context.power(x, y, modulo)`` is
1365 equal to the value that would be obtained by computing ``(x**y)
1366 % modulo`` with unbounded precision, but is computed more
1367 efficiently. The exponent of the result is zero, regardless of
1368 the exponents of ``x``, ``y`` and ``modulo``. The result is
1369 always exact.
Georg Brandl116aa622007-08-15 14:28:22 +00001370
Facundo Batista789bdf02008-06-21 17:29:41 +00001371
1372 .. method:: quantize(x, y)
1373
1374 Returns a value equal to *x* (rounded), having the exponent of *y*.
1375
1376
1377 .. method:: radix()
1378
1379 Just returns 10, as this is Decimal, :)
1380
1381
Benjamin Petersone41251e2008-04-25 01:59:09 +00001382 .. method:: remainder(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001383
Benjamin Petersone41251e2008-04-25 01:59:09 +00001384 Returns the remainder from integer division.
Georg Brandl116aa622007-08-15 14:28:22 +00001385
Benjamin Petersone41251e2008-04-25 01:59:09 +00001386 The sign of the result, if non-zero, is the same as that of the original
1387 dividend.
Georg Brandl116aa622007-08-15 14:28:22 +00001388
Benjamin Petersondcf97b92008-07-02 17:30:14 +00001389
Facundo Batista789bdf02008-06-21 17:29:41 +00001390 .. method:: remainder_near(x, y)
1391
Georg Brandl36ab1ef2009-01-03 21:17:04 +00001392 Returns ``x - y * n``, where *n* is the integer nearest the exact value
1393 of ``x / y`` (if the result is 0 then its sign will be the sign of *x*).
Facundo Batista789bdf02008-06-21 17:29:41 +00001394
1395
1396 .. method:: rotate(x, y)
1397
1398 Returns a rotated copy of *x*, *y* times.
1399
1400
1401 .. method:: same_quantum(x, y)
1402
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001403 Returns ``True`` if the two operands have the same exponent.
Facundo Batista789bdf02008-06-21 17:29:41 +00001404
1405
1406 .. method:: scaleb (x, y)
1407
1408 Returns the first operand after adding the second value its exp.
1409
1410
1411 .. method:: shift(x, y)
1412
1413 Returns a shifted copy of *x*, *y* times.
1414
1415
1416 .. method:: sqrt(x)
1417
1418 Square root of a non-negative number to context precision.
1419
1420
Benjamin Petersone41251e2008-04-25 01:59:09 +00001421 .. method:: subtract(x, y)
Georg Brandl116aa622007-08-15 14:28:22 +00001422
Benjamin Petersone41251e2008-04-25 01:59:09 +00001423 Return the difference between *x* and *y*.
Georg Brandl116aa622007-08-15 14:28:22 +00001424
Facundo Batista789bdf02008-06-21 17:29:41 +00001425
1426 .. method:: to_eng_string(x)
1427
Raymond Hettingerf6ffa982016-08-13 11:15:34 -07001428 Convert to a string, using engineering notation if an exponent is needed.
1429
1430 Engineering notation has an exponent which is a multiple of 3. This
1431 can leave up to 3 digits to the left of the decimal place and may
1432 require the addition of either one or two trailing zeros.
Facundo Batista789bdf02008-06-21 17:29:41 +00001433
1434
1435 .. method:: to_integral_exact(x)
1436
1437 Rounds to an integer.
1438
1439
Benjamin Petersone41251e2008-04-25 01:59:09 +00001440 .. method:: to_sci_string(x)
Georg Brandl116aa622007-08-15 14:28:22 +00001441
Benjamin Petersone41251e2008-04-25 01:59:09 +00001442 Converts a number to a string using scientific notation.
Georg Brandl116aa622007-08-15 14:28:22 +00001443
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001444.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +00001445
Stefan Krah1919b7e2012-03-21 18:25:23 +01001446.. _decimal-rounding-modes:
1447
1448Constants
1449---------
1450
1451The constants in this section are only relevant for the C module. They
1452are also included in the pure Python version for compatibility.
1453
Stefan Krah851a07e2012-03-21 18:47:20 +01001454+---------------------+---------------------+-------------------------------+
1455| | 32-bit | 64-bit |
1456+=====================+=====================+===============================+
1457| .. data:: MAX_PREC | :const:`425000000` | :const:`999999999999999999` |
1458+---------------------+---------------------+-------------------------------+
1459| .. data:: MAX_EMAX | :const:`425000000` | :const:`999999999999999999` |
1460+---------------------+---------------------+-------------------------------+
1461| .. data:: MIN_EMIN | :const:`-425000000` | :const:`-999999999999999999` |
1462+---------------------+---------------------+-------------------------------+
1463| .. data:: MIN_ETINY | :const:`-849999999` | :const:`-1999999999999999997` |
1464+---------------------+---------------------+-------------------------------+
1465
Stefan Krah1919b7e2012-03-21 18:25:23 +01001466
1467.. data:: HAVE_THREADS
1468
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001469 The default value is ``True``. If Python is compiled without threads, the
Stefan Krah1919b7e2012-03-21 18:25:23 +01001470 C version automatically disables the expensive thread local context
Serhiy Storchaka22dc4d52013-11-26 17:32:16 +02001471 machinery. In this case, the value is ``False``.
Stefan Krah1919b7e2012-03-21 18:25:23 +01001472
1473Rounding modes
1474--------------
1475
1476.. data:: ROUND_CEILING
1477
1478 Round towards :const:`Infinity`.
1479
1480.. data:: ROUND_DOWN
1481
1482 Round towards zero.
1483
1484.. data:: ROUND_FLOOR
1485
1486 Round towards :const:`-Infinity`.
1487
1488.. data:: ROUND_HALF_DOWN
1489
1490 Round to nearest with ties going towards zero.
1491
1492.. data:: ROUND_HALF_EVEN
1493
1494 Round to nearest with ties going to nearest even integer.
1495
1496.. data:: ROUND_HALF_UP
1497
1498 Round to nearest with ties going away from zero.
1499
1500.. data:: ROUND_UP
1501
1502 Round away from zero.
1503
1504.. data:: ROUND_05UP
1505
1506 Round away from zero if last digit after rounding towards zero would have
1507 been 0 or 5; otherwise round towards zero.
1508
Georg Brandl116aa622007-08-15 14:28:22 +00001509
1510.. _decimal-signals:
1511
1512Signals
1513-------
1514
1515Signals represent conditions that arise during computation. Each corresponds to
1516one context flag and one context trap enabler.
1517
Raymond Hettinger86173da2008-02-01 20:38:12 +00001518The context flag is set whenever the condition is encountered. After the
Georg Brandl116aa622007-08-15 14:28:22 +00001519computation, flags may be checked for informational purposes (for instance, to
1520determine whether a computation was exact). After checking the flags, be sure to
1521clear all flags before starting the next computation.
1522
1523If the context's trap enabler is set for the signal, then the condition causes a
1524Python exception to be raised. For example, if the :class:`DivisionByZero` trap
1525is set, then a :exc:`DivisionByZero` exception is raised upon encountering the
1526condition.
1527
1528
1529.. class:: Clamped
1530
1531 Altered an exponent to fit representation constraints.
1532
1533 Typically, clamping occurs when an exponent falls outside the context's
1534 :attr:`Emin` and :attr:`Emax` limits. If possible, the exponent is reduced to
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001535 fit by adding zeros to the coefficient.
Georg Brandl116aa622007-08-15 14:28:22 +00001536
1537
1538.. class:: DecimalException
1539
1540 Base class for other signals and a subclass of :exc:`ArithmeticError`.
1541
1542
1543.. class:: DivisionByZero
1544
1545 Signals the division of a non-infinite number by zero.
1546
1547 Can occur with division, modulo division, or when raising a number to a negative
1548 power. If this signal is not trapped, returns :const:`Infinity` or
1549 :const:`-Infinity` with the sign determined by the inputs to the calculation.
1550
1551
1552.. class:: Inexact
1553
1554 Indicates that rounding occurred and the result is not exact.
1555
1556 Signals when non-zero digits were discarded during rounding. The rounded result
1557 is returned. The signal flag or trap is used to detect when results are
1558 inexact.
1559
1560
1561.. class:: InvalidOperation
1562
1563 An invalid operation was performed.
1564
1565 Indicates that an operation was requested that does not make sense. If not
1566 trapped, returns :const:`NaN`. Possible causes include::
1567
1568 Infinity - Infinity
1569 0 * Infinity
1570 Infinity / Infinity
1571 x % 0
1572 Infinity % x
Georg Brandl116aa622007-08-15 14:28:22 +00001573 sqrt(-x) and x > 0
1574 0 ** 0
1575 x ** (non-integer)
Georg Brandl48310cd2009-01-03 21:18:54 +00001576 x ** Infinity
Georg Brandl116aa622007-08-15 14:28:22 +00001577
1578
1579.. class:: Overflow
1580
1581 Numerical overflow.
1582
Benjamin Petersone41251e2008-04-25 01:59:09 +00001583 Indicates the exponent is larger than :attr:`Emax` after rounding has
1584 occurred. If not trapped, the result depends on the rounding mode, either
1585 pulling inward to the largest representable finite number or rounding outward
1586 to :const:`Infinity`. In either case, :class:`Inexact` and :class:`Rounded`
1587 are also signaled.
Georg Brandl116aa622007-08-15 14:28:22 +00001588
1589
1590.. class:: Rounded
1591
1592 Rounding occurred though possibly no information was lost.
1593
Benjamin Petersone41251e2008-04-25 01:59:09 +00001594 Signaled whenever rounding discards digits; even if those digits are zero
1595 (such as rounding :const:`5.00` to :const:`5.0`). If not trapped, returns
1596 the result unchanged. This signal is used to detect loss of significant
1597 digits.
Georg Brandl116aa622007-08-15 14:28:22 +00001598
1599
1600.. class:: Subnormal
1601
1602 Exponent was lower than :attr:`Emin` prior to rounding.
1603
Benjamin Petersone41251e2008-04-25 01:59:09 +00001604 Occurs when an operation result is subnormal (the exponent is too small). If
1605 not trapped, returns the result unchanged.
Georg Brandl116aa622007-08-15 14:28:22 +00001606
1607
1608.. class:: Underflow
1609
1610 Numerical underflow with result rounded to zero.
1611
1612 Occurs when a subnormal result is pushed to zero by rounding. :class:`Inexact`
1613 and :class:`Subnormal` are also signaled.
1614
Stefan Krah1919b7e2012-03-21 18:25:23 +01001615
1616.. class:: FloatOperation
1617
1618 Enable stricter semantics for mixing floats and Decimals.
1619
1620 If the signal is not trapped (default), mixing floats and Decimals is
1621 permitted in the :class:`~decimal.Decimal` constructor,
1622 :meth:`~decimal.Context.create_decimal` and all comparison operators.
1623 Both conversion and comparisons are exact. Any occurrence of a mixed
1624 operation is silently recorded by setting :exc:`FloatOperation` in the
1625 context flags. Explicit conversions with :meth:`~decimal.Decimal.from_float`
1626 or :meth:`~decimal.Context.create_decimal_from_float` do not set the flag.
1627
1628 Otherwise (the signal is trapped), only equality comparisons and explicit
1629 conversions are silent. All other mixed operations raise :exc:`FloatOperation`.
1630
1631
Georg Brandl116aa622007-08-15 14:28:22 +00001632The following table summarizes the hierarchy of signals::
1633
1634 exceptions.ArithmeticError(exceptions.Exception)
1635 DecimalException
1636 Clamped
1637 DivisionByZero(DecimalException, exceptions.ZeroDivisionError)
1638 Inexact
1639 Overflow(Inexact, Rounded)
1640 Underflow(Inexact, Rounded, Subnormal)
1641 InvalidOperation
1642 Rounded
1643 Subnormal
Stefan Krahb6405ef2012-03-23 14:46:48 +01001644 FloatOperation(DecimalException, exceptions.TypeError)
Georg Brandl116aa622007-08-15 14:28:22 +00001645
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001646.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +00001647
1648
Stefan Krah1919b7e2012-03-21 18:25:23 +01001649
Georg Brandl116aa622007-08-15 14:28:22 +00001650.. _decimal-notes:
1651
1652Floating Point Notes
1653--------------------
1654
1655
1656Mitigating round-off error with increased precision
1657^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1658
1659The use of decimal floating point eliminates decimal representation error
1660(making it possible to represent :const:`0.1` exactly); however, some operations
1661can still incur round-off error when non-zero digits exceed the fixed precision.
1662
1663The effects of round-off error can be amplified by the addition or subtraction
1664of nearly offsetting quantities resulting in loss of significance. Knuth
1665provides two instructive examples where rounded floating point arithmetic with
1666insufficient precision causes the breakdown of the associative and distributive
Christian Heimesfe337bf2008-03-23 21:54:12 +00001667properties of addition:
1668
1669.. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +00001670
1671 # Examples from Seminumerical Algorithms, Section 4.2.2.
1672 >>> from decimal import Decimal, getcontext
1673 >>> getcontext().prec = 8
1674
1675 >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
1676 >>> (u + v) + w
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001677 Decimal('9.5111111')
Georg Brandl116aa622007-08-15 14:28:22 +00001678 >>> u + (v + w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001679 Decimal('10')
Georg Brandl116aa622007-08-15 14:28:22 +00001680
1681 >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
1682 >>> (u*v) + (u*w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001683 Decimal('0.01')
Georg Brandl116aa622007-08-15 14:28:22 +00001684 >>> u * (v+w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001685 Decimal('0.0060000')
Georg Brandl116aa622007-08-15 14:28:22 +00001686
1687The :mod:`decimal` module makes it possible to restore the identities by
Christian Heimesfe337bf2008-03-23 21:54:12 +00001688expanding the precision sufficiently to avoid loss of significance:
1689
1690.. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +00001691
1692 >>> getcontext().prec = 20
1693 >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
1694 >>> (u + v) + w
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001695 Decimal('9.51111111')
Georg Brandl116aa622007-08-15 14:28:22 +00001696 >>> u + (v + w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001697 Decimal('9.51111111')
Georg Brandl48310cd2009-01-03 21:18:54 +00001698 >>>
Georg Brandl116aa622007-08-15 14:28:22 +00001699 >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
1700 >>> (u*v) + (u*w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001701 Decimal('0.0060000')
Georg Brandl116aa622007-08-15 14:28:22 +00001702 >>> u * (v+w)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001703 Decimal('0.0060000')
Georg Brandl116aa622007-08-15 14:28:22 +00001704
1705
1706Special values
1707^^^^^^^^^^^^^^
1708
1709The number system for the :mod:`decimal` module provides special values
1710including :const:`NaN`, :const:`sNaN`, :const:`-Infinity`, :const:`Infinity`,
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001711and two zeros, :const:`+0` and :const:`-0`.
Georg Brandl116aa622007-08-15 14:28:22 +00001712
1713Infinities can be constructed directly with: ``Decimal('Infinity')``. Also,
1714they can arise from dividing by zero when the :exc:`DivisionByZero` signal is
1715not trapped. Likewise, when the :exc:`Overflow` signal is not trapped, infinity
1716can result from rounding beyond the limits of the largest representable number.
1717
1718The infinities are signed (affine) and can be used in arithmetic operations
1719where they get treated as very large, indeterminate numbers. For instance,
1720adding a constant to infinity gives another infinite result.
1721
1722Some operations are indeterminate and return :const:`NaN`, or if the
1723:exc:`InvalidOperation` signal is trapped, raise an exception. For example,
1724``0/0`` returns :const:`NaN` which means "not a number". This variety of
1725:const:`NaN` is quiet and, once created, will flow through other computations
1726always resulting in another :const:`NaN`. This behavior can be useful for a
1727series of computations that occasionally have missing inputs --- it allows the
1728calculation to proceed while flagging specific results as invalid.
1729
1730A variant is :const:`sNaN` which signals rather than remaining quiet after every
1731operation. This is a useful return value when an invalid result needs to
1732interrupt a calculation for special handling.
1733
Christian Heimes77c02eb2008-02-09 02:18:51 +00001734The behavior of Python's comparison operators can be a little surprising where a
1735:const:`NaN` is involved. A test for equality where one of the operands is a
1736quiet or signaling :const:`NaN` always returns :const:`False` (even when doing
1737``Decimal('NaN')==Decimal('NaN')``), while a test for inequality always returns
1738:const:`True`. An attempt to compare two Decimals using any of the ``<``,
1739``<=``, ``>`` or ``>=`` operators will raise the :exc:`InvalidOperation` signal
1740if either operand is a :const:`NaN`, and return :const:`False` if this signal is
Christian Heimes3feef612008-02-11 06:19:17 +00001741not trapped. Note that the General Decimal Arithmetic specification does not
Christian Heimes77c02eb2008-02-09 02:18:51 +00001742specify the behavior of direct comparisons; these rules for comparisons
1743involving a :const:`NaN` were taken from the IEEE 854 standard (see Table 3 in
1744section 5.7). To ensure strict standards-compliance, use the :meth:`compare`
1745and :meth:`compare-signal` methods instead.
1746
Georg Brandl116aa622007-08-15 14:28:22 +00001747The signed zeros can result from calculations that underflow. They keep the sign
1748that would have resulted if the calculation had been carried out to greater
1749precision. Since their magnitude is zero, both positive and negative zeros are
1750treated as equal and their sign is informational.
1751
1752In addition to the two signed zeros which are distinct yet equal, there are
1753various representations of zero with differing precisions yet equivalent in
1754value. This takes a bit of getting used to. For an eye accustomed to
1755normalized floating point representations, it is not immediately obvious that
Christian Heimesfe337bf2008-03-23 21:54:12 +00001756the following calculation returns a value equal to zero:
Georg Brandl116aa622007-08-15 14:28:22 +00001757
1758 >>> 1 / Decimal('Infinity')
Stefan Krah1919b7e2012-03-21 18:25:23 +01001759 Decimal('0E-1000026')
Georg Brandl116aa622007-08-15 14:28:22 +00001760
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001761.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +00001762
1763
1764.. _decimal-threads:
1765
1766Working with threads
1767--------------------
1768
1769The :func:`getcontext` function accesses a different :class:`Context` object for
1770each thread. Having separate thread contexts means that threads may make
Stefan Krah1919b7e2012-03-21 18:25:23 +01001771changes (such as ``getcontext().prec=10``) without interfering with other threads.
Georg Brandl116aa622007-08-15 14:28:22 +00001772
1773Likewise, the :func:`setcontext` function automatically assigns its target to
1774the current thread.
1775
1776If :func:`setcontext` has not been called before :func:`getcontext`, then
1777:func:`getcontext` will automatically create a new context for use in the
1778current thread.
1779
1780The new context is copied from a prototype context called *DefaultContext*. To
1781control the defaults so that each thread will use the same values throughout the
1782application, directly modify the *DefaultContext* object. This should be done
1783*before* any threads are started so that there won't be a race condition between
1784threads calling :func:`getcontext`. For example::
1785
1786 # Set applicationwide defaults for all threads about to be launched
1787 DefaultContext.prec = 12
1788 DefaultContext.rounding = ROUND_DOWN
1789 DefaultContext.traps = ExtendedContext.traps.copy()
1790 DefaultContext.traps[InvalidOperation] = 1
1791 setcontext(DefaultContext)
1792
1793 # Afterwards, the threads can be started
1794 t1.start()
1795 t2.start()
1796 t3.start()
1797 . . .
1798
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001799.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +00001800
1801
1802.. _decimal-recipes:
1803
1804Recipes
1805-------
1806
1807Here are a few recipes that serve as utility functions and that demonstrate ways
1808to work with the :class:`Decimal` class::
1809
1810 def moneyfmt(value, places=2, curr='', sep=',', dp='.',
1811 pos='', neg='-', trailneg=''):
1812 """Convert Decimal to a money formatted string.
1813
1814 places: required number of places after the decimal point
1815 curr: optional currency symbol before the sign (may be blank)
1816 sep: optional grouping separator (comma, period, space, or blank)
1817 dp: decimal point indicator (comma or period)
1818 only specify as blank when places is zero
1819 pos: optional sign for positive numbers: '+', space or blank
1820 neg: optional sign for negative numbers: '-', '(', space or blank
1821 trailneg:optional trailing minus indicator: '-', ')', space or blank
1822
1823 >>> d = Decimal('-1234567.8901')
1824 >>> moneyfmt(d, curr='$')
1825 '-$1,234,567.89'
1826 >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')
1827 '1.234.568-'
1828 >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
1829 '($1,234,567.89)'
1830 >>> moneyfmt(Decimal(123456789), sep=' ')
1831 '123 456 789.00'
1832 >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
Christian Heimesdae2a892008-04-19 00:55:37 +00001833 '<0.02>'
Georg Brandl116aa622007-08-15 14:28:22 +00001834
1835 """
Christian Heimesa156e092008-02-16 07:38:31 +00001836 q = Decimal(10) ** -places # 2 places --> '0.01'
Georg Brandl48310cd2009-01-03 21:18:54 +00001837 sign, digits, exp = value.quantize(q).as_tuple()
Georg Brandl116aa622007-08-15 14:28:22 +00001838 result = []
Facundo Batista789bdf02008-06-21 17:29:41 +00001839 digits = list(map(str, digits))
Georg Brandl116aa622007-08-15 14:28:22 +00001840 build, next = result.append, digits.pop
1841 if sign:
1842 build(trailneg)
1843 for i in range(places):
Christian Heimesa156e092008-02-16 07:38:31 +00001844 build(next() if digits else '0')
Raymond Hettinger0ab10e42011-01-08 09:03:11 +00001845 if places:
1846 build(dp)
Christian Heimesdae2a892008-04-19 00:55:37 +00001847 if not digits:
1848 build('0')
Georg Brandl116aa622007-08-15 14:28:22 +00001849 i = 0
1850 while digits:
1851 build(next())
1852 i += 1
1853 if i == 3 and digits:
1854 i = 0
1855 build(sep)
1856 build(curr)
Christian Heimesa156e092008-02-16 07:38:31 +00001857 build(neg if sign else pos)
1858 return ''.join(reversed(result))
Georg Brandl116aa622007-08-15 14:28:22 +00001859
1860 def pi():
1861 """Compute Pi to the current precision.
1862
Georg Brandl6911e3c2007-09-04 07:15:32 +00001863 >>> print(pi())
Georg Brandl116aa622007-08-15 14:28:22 +00001864 3.141592653589793238462643383
1865
1866 """
1867 getcontext().prec += 2 # extra digits for intermediate steps
1868 three = Decimal(3) # substitute "three=3.0" for regular floats
1869 lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
1870 while s != lasts:
1871 lasts = s
1872 n, na = n+na, na+8
1873 d, da = d+da, da+32
1874 t = (t * n) / d
1875 s += t
1876 getcontext().prec -= 2
1877 return +s # unary plus applies the new precision
1878
1879 def exp(x):
1880 """Return e raised to the power of x. Result type matches input type.
1881
Georg Brandl6911e3c2007-09-04 07:15:32 +00001882 >>> print(exp(Decimal(1)))
Georg Brandl116aa622007-08-15 14:28:22 +00001883 2.718281828459045235360287471
Georg Brandl6911e3c2007-09-04 07:15:32 +00001884 >>> print(exp(Decimal(2)))
Georg Brandl116aa622007-08-15 14:28:22 +00001885 7.389056098930650227230427461
Georg Brandl6911e3c2007-09-04 07:15:32 +00001886 >>> print(exp(2.0))
Georg Brandl116aa622007-08-15 14:28:22 +00001887 7.38905609893
Georg Brandl6911e3c2007-09-04 07:15:32 +00001888 >>> print(exp(2+0j))
Georg Brandl116aa622007-08-15 14:28:22 +00001889 (7.38905609893+0j)
1890
1891 """
1892 getcontext().prec += 2
1893 i, lasts, s, fact, num = 0, 0, 1, 1, 1
1894 while s != lasts:
Georg Brandl48310cd2009-01-03 21:18:54 +00001895 lasts = s
Georg Brandl116aa622007-08-15 14:28:22 +00001896 i += 1
1897 fact *= i
Georg Brandl48310cd2009-01-03 21:18:54 +00001898 num *= x
1899 s += num / fact
1900 getcontext().prec -= 2
Georg Brandl116aa622007-08-15 14:28:22 +00001901 return +s
1902
1903 def cos(x):
1904 """Return the cosine of x as measured in radians.
1905
Mark Dickinsonb2b23822010-11-21 07:37:49 +00001906 The Taylor series approximation works best for a small value of x.
Raymond Hettinger2a1e3e22010-11-21 02:47:22 +00001907 For larger values, first compute x = x % (2 * pi).
1908
Georg Brandl6911e3c2007-09-04 07:15:32 +00001909 >>> print(cos(Decimal('0.5')))
Georg Brandl116aa622007-08-15 14:28:22 +00001910 0.8775825618903727161162815826
Georg Brandl6911e3c2007-09-04 07:15:32 +00001911 >>> print(cos(0.5))
Georg Brandl116aa622007-08-15 14:28:22 +00001912 0.87758256189
Georg Brandl6911e3c2007-09-04 07:15:32 +00001913 >>> print(cos(0.5+0j))
Georg Brandl116aa622007-08-15 14:28:22 +00001914 (0.87758256189+0j)
1915
1916 """
1917 getcontext().prec += 2
1918 i, lasts, s, fact, num, sign = 0, 0, 1, 1, 1, 1
1919 while s != lasts:
Georg Brandl48310cd2009-01-03 21:18:54 +00001920 lasts = s
Georg Brandl116aa622007-08-15 14:28:22 +00001921 i += 2
1922 fact *= i * (i-1)
1923 num *= x * x
1924 sign *= -1
Georg Brandl48310cd2009-01-03 21:18:54 +00001925 s += num / fact * sign
1926 getcontext().prec -= 2
Georg Brandl116aa622007-08-15 14:28:22 +00001927 return +s
1928
1929 def sin(x):
1930 """Return the sine of x as measured in radians.
1931
Mark Dickinsonb2b23822010-11-21 07:37:49 +00001932 The Taylor series approximation works best for a small value of x.
Raymond Hettinger2a1e3e22010-11-21 02:47:22 +00001933 For larger values, first compute x = x % (2 * pi).
1934
Georg Brandl6911e3c2007-09-04 07:15:32 +00001935 >>> print(sin(Decimal('0.5')))
Georg Brandl116aa622007-08-15 14:28:22 +00001936 0.4794255386042030002732879352
Georg Brandl6911e3c2007-09-04 07:15:32 +00001937 >>> print(sin(0.5))
Georg Brandl116aa622007-08-15 14:28:22 +00001938 0.479425538604
Georg Brandl6911e3c2007-09-04 07:15:32 +00001939 >>> print(sin(0.5+0j))
Georg Brandl116aa622007-08-15 14:28:22 +00001940 (0.479425538604+0j)
1941
1942 """
1943 getcontext().prec += 2
1944 i, lasts, s, fact, num, sign = 1, 0, x, 1, x, 1
1945 while s != lasts:
Georg Brandl48310cd2009-01-03 21:18:54 +00001946 lasts = s
Georg Brandl116aa622007-08-15 14:28:22 +00001947 i += 2
1948 fact *= i * (i-1)
1949 num *= x * x
1950 sign *= -1
Georg Brandl48310cd2009-01-03 21:18:54 +00001951 s += num / fact * sign
1952 getcontext().prec -= 2
Georg Brandl116aa622007-08-15 14:28:22 +00001953 return +s
1954
1955
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001956.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Georg Brandl116aa622007-08-15 14:28:22 +00001957
1958
1959.. _decimal-faq:
1960
1961Decimal FAQ
1962-----------
1963
1964Q. It is cumbersome to type ``decimal.Decimal('1234.5')``. Is there a way to
1965minimize typing when using the interactive interpreter?
1966
Christian Heimesfe337bf2008-03-23 21:54:12 +00001967A. Some users abbreviate the constructor to just a single letter:
Georg Brandl116aa622007-08-15 14:28:22 +00001968
1969 >>> D = decimal.Decimal
1970 >>> D('1.23') + D('3.45')
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001971 Decimal('4.68')
Georg Brandl116aa622007-08-15 14:28:22 +00001972
1973Q. In a fixed-point application with two decimal places, some inputs have many
1974places and need to be rounded. Others are not supposed to have excess digits
1975and need to be validated. What methods should be used?
1976
1977A. The :meth:`quantize` method rounds to a fixed number of decimal places. If
Christian Heimesfe337bf2008-03-23 21:54:12 +00001978the :const:`Inexact` trap is set, it is also useful for validation:
Georg Brandl116aa622007-08-15 14:28:22 +00001979
1980 >>> TWOPLACES = Decimal(10) ** -2 # same as Decimal('0.01')
1981
1982 >>> # Round to two places
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001983 >>> Decimal('3.214').quantize(TWOPLACES)
1984 Decimal('3.21')
Georg Brandl116aa622007-08-15 14:28:22 +00001985
Georg Brandl48310cd2009-01-03 21:18:54 +00001986 >>> # Validate that a number does not exceed two places
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001987 >>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
1988 Decimal('3.21')
Georg Brandl116aa622007-08-15 14:28:22 +00001989
Christian Heimes68f5fbe2008-02-14 08:27:37 +00001990 >>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Georg Brandl116aa622007-08-15 14:28:22 +00001991 Traceback (most recent call last):
1992 ...
Benjamin Peterson25c95f12009-05-08 20:42:26 +00001993 Inexact: None
Georg Brandl116aa622007-08-15 14:28:22 +00001994
1995Q. Once I have valid two place inputs, how do I maintain that invariant
1996throughout an application?
1997
Christian Heimesa156e092008-02-16 07:38:31 +00001998A. Some operations like addition, subtraction, and multiplication by an integer
1999will automatically preserve fixed point. Others operations, like division and
2000non-integer multiplication, will change the number of decimal places and need to
Christian Heimesfe337bf2008-03-23 21:54:12 +00002001be followed-up with a :meth:`quantize` step:
Christian Heimesa156e092008-02-16 07:38:31 +00002002
2003 >>> a = Decimal('102.72') # Initial fixed-point values
2004 >>> b = Decimal('3.17')
2005 >>> a + b # Addition preserves fixed-point
2006 Decimal('105.89')
2007 >>> a - b
2008 Decimal('99.55')
2009 >>> a * 42 # So does integer multiplication
2010 Decimal('4314.24')
2011 >>> (a * b).quantize(TWOPLACES) # Must quantize non-integer multiplication
2012 Decimal('325.62')
2013 >>> (b / a).quantize(TWOPLACES) # And quantize division
2014 Decimal('0.03')
2015
2016In developing fixed-point applications, it is convenient to define functions
Christian Heimesfe337bf2008-03-23 21:54:12 +00002017to handle the :meth:`quantize` step:
Christian Heimesa156e092008-02-16 07:38:31 +00002018
2019 >>> def mul(x, y, fp=TWOPLACES):
2020 ... return (x * y).quantize(fp)
2021 >>> def div(x, y, fp=TWOPLACES):
2022 ... return (x / y).quantize(fp)
2023
2024 >>> mul(a, b) # Automatically preserve fixed-point
2025 Decimal('325.62')
2026 >>> div(b, a)
2027 Decimal('0.03')
Georg Brandl116aa622007-08-15 14:28:22 +00002028
2029Q. There are many ways to express the same value. The numbers :const:`200`,
2030:const:`200.000`, :const:`2E2`, and :const:`.02E+4` all have the same value at
2031various precisions. Is there a way to transform them to a single recognizable
2032canonical value?
2033
2034A. The :meth:`normalize` method maps all equivalent values to a single
Christian Heimesfe337bf2008-03-23 21:54:12 +00002035representative:
Georg Brandl116aa622007-08-15 14:28:22 +00002036
2037 >>> values = map(Decimal, '200 200.000 2E2 .02E+4'.split())
2038 >>> [v.normalize() for v in values]
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002039 [Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2')]
Georg Brandl116aa622007-08-15 14:28:22 +00002040
2041Q. Some decimal values always print with exponential notation. Is there a way
2042to get a non-exponential representation?
2043
2044A. For some values, exponential notation is the only way to express the number
2045of significant places in the coefficient. For example, expressing
2046:const:`5.0E+3` as :const:`5000` keeps the value constant but cannot show the
2047original's two-place significance.
2048
Christian Heimesa156e092008-02-16 07:38:31 +00002049If an application does not care about tracking significance, it is easy to
Christian Heimesc3f30c42008-02-22 16:37:40 +00002050remove the exponent and trailing zeroes, losing significance, but keeping the
Christian Heimesfe337bf2008-03-23 21:54:12 +00002051value unchanged:
Christian Heimesa156e092008-02-16 07:38:31 +00002052
2053 >>> def remove_exponent(d):
2054 ... return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize()
2055
2056 >>> remove_exponent(Decimal('5E+3'))
2057 Decimal('5000')
2058
Georg Brandl116aa622007-08-15 14:28:22 +00002059Q. Is there a way to convert a regular float to a :class:`Decimal`?
2060
Mark Dickinsone534a072010-04-04 22:13:14 +00002061A. Yes, any binary floating point number can be exactly expressed as a
Raymond Hettinger96798592010-04-02 16:58:27 +00002062Decimal though an exact conversion may take more precision than intuition would
2063suggest:
Georg Brandl116aa622007-08-15 14:28:22 +00002064
Christian Heimesfe337bf2008-03-23 21:54:12 +00002065.. doctest::
2066
Raymond Hettinger96798592010-04-02 16:58:27 +00002067 >>> Decimal(math.pi)
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002068 Decimal('3.141592653589793115997963468544185161590576171875')
Georg Brandl116aa622007-08-15 14:28:22 +00002069
Georg Brandl116aa622007-08-15 14:28:22 +00002070Q. Within a complex calculation, how can I make sure that I haven't gotten a
2071spurious result because of insufficient precision or rounding anomalies.
2072
2073A. The decimal module makes it easy to test results. A best practice is to
2074re-run calculations using greater precision and with various rounding modes.
2075Widely differing results indicate insufficient precision, rounding mode issues,
2076ill-conditioned inputs, or a numerically unstable algorithm.
2077
2078Q. I noticed that context precision is applied to the results of operations but
2079not to the inputs. Is there anything to watch out for when mixing values of
2080different precisions?
2081
2082A. Yes. The principle is that all values are considered to be exact and so is
2083the arithmetic on those values. Only the results are rounded. The advantage
2084for inputs is that "what you type is what you get". A disadvantage is that the
Christian Heimesfe337bf2008-03-23 21:54:12 +00002085results can look odd if you forget that the inputs haven't been rounded:
2086
2087.. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +00002088
2089 >>> getcontext().prec = 3
Christian Heimesfe337bf2008-03-23 21:54:12 +00002090 >>> Decimal('3.104') + Decimal('2.104')
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002091 Decimal('5.21')
Christian Heimesfe337bf2008-03-23 21:54:12 +00002092 >>> Decimal('3.104') + Decimal('0.000') + Decimal('2.104')
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002093 Decimal('5.20')
Georg Brandl116aa622007-08-15 14:28:22 +00002094
2095The solution is either to increase precision or to force rounding of inputs
Christian Heimesfe337bf2008-03-23 21:54:12 +00002096using the unary plus operation:
2097
2098.. doctest:: newcontext
Georg Brandl116aa622007-08-15 14:28:22 +00002099
2100 >>> getcontext().prec = 3
2101 >>> +Decimal('1.23456789') # unary plus triggers rounding
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002102 Decimal('1.23')
Georg Brandl116aa622007-08-15 14:28:22 +00002103
2104Alternatively, inputs can be rounded upon creation using the
Christian Heimesfe337bf2008-03-23 21:54:12 +00002105:meth:`Context.create_decimal` method:
Georg Brandl116aa622007-08-15 14:28:22 +00002106
2107 >>> Context(prec=5, rounding=ROUND_DOWN).create_decimal('1.2345678')
Christian Heimes68f5fbe2008-02-14 08:27:37 +00002108 Decimal('1.2345')