source: vendor/python/2.5/Doc/lib/libdecimal.tex

Last change on this file was 3225, checked in by bird, 18 years ago

Python 2.5

File size: 46.8 KB
Line 
1\section{\module{decimal} ---
2 Decimal floating point arithmetic}
3
4\declaremodule{standard}{decimal}
5\modulesynopsis{Implementation of the General Decimal Arithmetic
6Specification.}
7
8\moduleauthor{Eric Price}{eprice at tjhsst.edu}
9\moduleauthor{Facundo Batista}{facundo at taniquetil.com.ar}
10\moduleauthor{Raymond Hettinger}{python at rcn.com}
11\moduleauthor{Aahz}{aahz at pobox.com}
12\moduleauthor{Tim Peters}{tim.one at comcast.net}
13
14\sectionauthor{Raymond D. Hettinger}{python at rcn.com}
15
16\versionadded{2.4}
17
18The \module{decimal} module provides support for decimal floating point
19arithmetic. It offers several advantages over the \class{float()} datatype:
20
21\begin{itemize}
22
23\item Decimal numbers can be represented exactly. In contrast, numbers like
24\constant{1.1} do not have an exact representation in binary floating point.
25End users typically would not expect \constant{1.1} to display as
26\constant{1.1000000000000001} as it does with binary floating point.
27
28\item The exactness carries over into arithmetic. In decimal floating point,
29\samp{0.1 + 0.1 + 0.1 - 0.3} is exactly equal to zero. In binary floating
30point, result is \constant{5.5511151231257827e-017}. While near to zero, the
31differences prevent reliable equality testing and differences can accumulate.
32For this reason, decimal would be preferred in accounting applications which
33have strict equality invariants.
34
35\item The decimal module incorporates a notion of significant places so that
36\samp{1.30 + 1.20} is \constant{2.50}. The trailing zero is kept to indicate
37significance. This is the customary presentation for monetary applications. For
38multiplication, the ``schoolbook'' approach uses all the figures in the
39multiplicands. For instance, \samp{1.3 * 1.2} gives \constant{1.56} while
40\samp{1.30 * 1.20} gives \constant{1.5600}.
41
42\item Unlike hardware based binary floating point, the decimal module has a user
43settable precision (defaulting to 28 places) which can be as large as needed for
44a given problem:
45
46\begin{verbatim}
47>>> getcontext().prec = 6
48>>> Decimal(1) / Decimal(7)
49Decimal("0.142857")
50>>> getcontext().prec = 28
51>>> Decimal(1) / Decimal(7)
52Decimal("0.1428571428571428571428571429")
53\end{verbatim}
54
55\item Both binary and decimal floating point are implemented in terms of published
56standards. While the built-in float type exposes only a modest portion of its
57capabilities, the decimal module exposes all required parts of the standard.
58When needed, the programmer has full control over rounding and signal handling.
59
60\end{itemize}
61
62
63The module design is centered around three concepts: the decimal number, the
64context for arithmetic, and signals.
65
66A decimal number is immutable. It has a sign, coefficient digits, and an
67exponent. To preserve significance, the coefficient digits do not truncate
68trailing zeroes. Decimals also include special values such as
69\constant{Infinity}, \constant{-Infinity}, and \constant{NaN}. The standard
70also differentiates \constant{-0} from \constant{+0}.
71
72The context for arithmetic is an environment specifying precision, rounding
73rules, limits on exponents, flags indicating the results of operations,
74and trap enablers which determine whether signals are treated as
75exceptions. Rounding options include \constant{ROUND_CEILING},
76\constant{ROUND_DOWN}, \constant{ROUND_FLOOR}, \constant{ROUND_HALF_DOWN},
77\constant{ROUND_HALF_EVEN}, \constant{ROUND_HALF_UP}, and \constant{ROUND_UP}.
78
79Signals are groups of exceptional conditions arising during the course of
80computation. Depending on the needs of the application, signals may be
81ignored, considered as informational, or treated as exceptions. The signals in
82the decimal module are: \constant{Clamped}, \constant{InvalidOperation},
83\constant{DivisionByZero}, \constant{Inexact}, \constant{Rounded},
84\constant{Subnormal}, \constant{Overflow}, and \constant{Underflow}.
85
86For each signal there is a flag and a trap enabler. When a signal is
87encountered, its flag is incremented from zero and, then, if the trap enabler
88is set to one, an exception is raised. Flags are sticky, so the user
89needs to reset them before monitoring a calculation.
90
91
92\begin{seealso}
93 \seetext{IBM's General Decimal Arithmetic Specification,
94 \citetitle[http://www2.hursley.ibm.com/decimal/decarith.html]
95 {The General Decimal Arithmetic Specification}.}
96
97 \seetext{IEEE standard 854-1987,
98 \citetitle[http://www.cs.berkeley.edu/\textasciitilde ejr/projects/754/private/drafts/854-1987/dir.html]
99 {Unofficial IEEE 854 Text}.}
100\end{seealso}
101
102
103
104%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
105\subsection{Quick-start Tutorial \label{decimal-tutorial}}
106
107The usual start to using decimals is importing the module, viewing the current
108context with \function{getcontext()} and, if necessary, setting new values
109for precision, rounding, or enabled traps:
110
111\begin{verbatim}
112>>> from decimal import *
113>>> getcontext()
114Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999,
115 capitals=1, flags=[], traps=[Overflow, InvalidOperation,
116 DivisionByZero])
117
118>>> getcontext().prec = 7 # Set a new precision
119\end{verbatim}
120
121
122Decimal instances can be constructed from integers, strings, or tuples. To
123create a Decimal from a \class{float}, first convert it to a string. This
124serves as an explicit reminder of the details of the conversion (including
125representation error). Decimal numbers include special values such as
126\constant{NaN} which stands for ``Not a number'', positive and negative
127\constant{Infinity}, and \constant{-0}.
128
129\begin{verbatim}
130>>> Decimal(10)
131Decimal("10")
132>>> Decimal("3.14")
133Decimal("3.14")
134>>> Decimal((0, (3, 1, 4), -2))
135Decimal("3.14")
136>>> Decimal(str(2.0 ** 0.5))
137Decimal("1.41421356237")
138>>> Decimal("NaN")
139Decimal("NaN")
140>>> Decimal("-Infinity")
141Decimal("-Infinity")
142\end{verbatim}
143
144
145The significance of a new Decimal is determined solely by the number
146of digits input. Context precision and rounding only come into play during
147arithmetic operations.
148
149\begin{verbatim}
150>>> getcontext().prec = 6
151>>> Decimal('3.0')
152Decimal("3.0")
153>>> Decimal('3.1415926535')
154Decimal("3.1415926535")
155>>> Decimal('3.1415926535') + Decimal('2.7182818285')
156Decimal("5.85987")
157>>> getcontext().rounding = ROUND_UP
158>>> Decimal('3.1415926535') + Decimal('2.7182818285')
159Decimal("5.85988")
160\end{verbatim}
161
162
163Decimals interact well with much of the rest of Python. Here is a small
164decimal floating point flying circus:
165
166\begin{verbatim}
167>>> data = map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split())
168>>> max(data)
169Decimal("9.25")
170>>> min(data)
171Decimal("0.03")
172>>> sorted(data)
173[Decimal("0.03"), Decimal("1.00"), Decimal("1.34"), Decimal("1.87"),
174 Decimal("2.35"), Decimal("3.45"), Decimal("9.25")]
175>>> sum(data)
176Decimal("19.29")
177>>> a,b,c = data[:3]
178>>> str(a)
179'1.34'
180>>> float(a)
1811.3400000000000001
182>>> round(a, 1) # round() first converts to binary floating point
1831.3
184>>> int(a)
1851
186>>> a * 5
187Decimal("6.70")
188>>> a * b
189Decimal("2.5058")
190>>> c % a
191Decimal("0.77")
192\end{verbatim}
193
194The \method{quantize()} method rounds a number to a fixed exponent. This
195method is useful for monetary applications that often round results to a fixed
196number of places:
197
198\begin{verbatim}
199>>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
200Decimal("7.32")
201>>> Decimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP)
202Decimal("8")
203\end{verbatim}
204
205As shown above, the \function{getcontext()} function accesses the current
206context and allows the settings to be changed. This approach meets the
207needs of most applications.
208
209For more advanced work, it may be useful to create alternate contexts using
210the Context() constructor. To make an alternate active, use the
211\function{setcontext()} function.
212
213In accordance with the standard, the \module{Decimal} module provides two
214ready to use standard contexts, \constant{BasicContext} and
215\constant{ExtendedContext}. The former is especially useful for debugging
216because many of the traps are enabled:
217
218\begin{verbatim}
219>>> myothercontext = Context(prec=60, rounding=ROUND_HALF_DOWN)
220>>> setcontext(myothercontext)
221>>> Decimal(1) / Decimal(7)
222Decimal("0.142857142857142857142857142857142857142857142857142857142857")
223
224>>> ExtendedContext
225Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999,
226 capitals=1, flags=[], traps=[])
227>>> setcontext(ExtendedContext)
228>>> Decimal(1) / Decimal(7)
229Decimal("0.142857143")
230>>> Decimal(42) / Decimal(0)
231Decimal("Infinity")
232
233>>> setcontext(BasicContext)
234>>> Decimal(42) / Decimal(0)
235Traceback (most recent call last):
236 File "<pyshell#143>", line 1, in -toplevel-
237 Decimal(42) / Decimal(0)
238DivisionByZero: x / 0
239\end{verbatim}
240
241
242Contexts also have signal flags for monitoring exceptional conditions
243encountered during computations. The flags remain set until explicitly
244cleared, so it is best to clear the flags before each set of monitored
245computations by using the \method{clear_flags()} method.
246
247\begin{verbatim}
248>>> setcontext(ExtendedContext)
249>>> getcontext().clear_flags()
250>>> Decimal(355) / Decimal(113)
251Decimal("3.14159292")
252>>> getcontext()
253Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999,
254 capitals=1, flags=[Inexact, Rounded], traps=[])
255\end{verbatim}
256
257The \var{flags} entry shows that the rational approximation to \constant{Pi}
258was rounded (digits beyond the context precision were thrown away) and that
259the result is inexact (some of the discarded digits were non-zero).
260
261Individual traps are set using the dictionary in the \member{traps}
262field of a context:
263
264\begin{verbatim}
265>>> Decimal(1) / Decimal(0)
266Decimal("Infinity")
267>>> getcontext().traps[DivisionByZero] = 1
268>>> Decimal(1) / Decimal(0)
269Traceback (most recent call last):
270 File "<pyshell#112>", line 1, in -toplevel-
271 Decimal(1) / Decimal(0)
272DivisionByZero: x / 0
273\end{verbatim}
274
275Most programs adjust the current context only once, at the beginning of the
276program. And, in many applications, data is converted to \class{Decimal} with
277a single cast inside a loop. With context set and decimals created, the bulk
278of the program manipulates the data no differently than with other Python
279numeric types.
280
281
282
283%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
284\subsection{Decimal objects \label{decimal-decimal}}
285
286\begin{classdesc}{Decimal}{\optional{value \optional{, context}}}
287 Constructs a new \class{Decimal} object based from \var{value}.
288
289 \var{value} can be an integer, string, tuple, or another \class{Decimal}
290 object. If no \var{value} is given, returns \code{Decimal("0")}. If
291 \var{value} is a string, it should conform to the decimal numeric string
292 syntax:
293
294 \begin{verbatim}
295 sign ::= '+' | '-'
296 digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
297 indicator ::= 'e' | 'E'
298 digits ::= digit [digit]...
299 decimal-part ::= digits '.' [digits] | ['.'] digits
300 exponent-part ::= indicator [sign] digits
301 infinity ::= 'Infinity' | 'Inf'
302 nan ::= 'NaN' [digits] | 'sNaN' [digits]
303 numeric-value ::= decimal-part [exponent-part] | infinity
304 numeric-string ::= [sign] numeric-value | [sign] nan
305 \end{verbatim}
306
307 If \var{value} is a \class{tuple}, it should have three components,
308 a sign (\constant{0} for positive or \constant{1} for negative),
309 a \class{tuple} of digits, and an integer exponent. For example,
310 \samp{Decimal((0, (1, 4, 1, 4), -3))} returns \code{Decimal("1.414")}.
311
312 The \var{context} precision does not affect how many digits are stored.
313 That is determined exclusively by the number of digits in \var{value}. For
314 example, \samp{Decimal("3.00000")} records all five zeroes even if the
315 context precision is only three.
316
317 The purpose of the \var{context} argument is determining what to do if
318 \var{value} is a malformed string. If the context traps
319 \constant{InvalidOperation}, an exception is raised; otherwise, the
320 constructor returns a new Decimal with the value of \constant{NaN}.
321
322 Once constructed, \class{Decimal} objects are immutable.
323\end{classdesc}
324
325Decimal floating point objects share many properties with the other builtin
326numeric types such as \class{float} and \class{int}. All of the usual
327math operations and special methods apply. Likewise, decimal objects can
328be copied, pickled, printed, used as dictionary keys, used as set elements,
329compared, sorted, and coerced to another type (such as \class{float}
330or \class{long}).
331
332In addition to the standard numeric properties, decimal floating point objects
333also have a number of specialized methods:
334
335\begin{methoddesc}{adjusted}{}
336 Return the adjusted exponent after shifting out the coefficient's rightmost
337 digits until only the lead digit remains: \code{Decimal("321e+5").adjusted()}
338 returns seven. Used for determining the position of the most significant
339 digit with respect to the decimal point.
340\end{methoddesc}
341
342\begin{methoddesc}{as_tuple}{}
343 Returns a tuple representation of the number:
344 \samp{(sign, digittuple, exponent)}.
345\end{methoddesc}
346
347\begin{methoddesc}{compare}{other\optional{, context}}
348 Compares like \method{__cmp__()} but returns a decimal instance:
349 \begin{verbatim}
350 a or b is a NaN ==> Decimal("NaN")
351 a < b ==> Decimal("-1")
352 a == b ==> Decimal("0")
353 a > b ==> Decimal("1")
354 \end{verbatim}
355\end{methoddesc}
356
357\begin{methoddesc}{max}{other\optional{, context}}
358 Like \samp{max(self, other)} except that the context rounding rule
359 is applied before returning and that \constant{NaN} values are
360 either signalled or ignored (depending on the context and whether
361 they are signaling or quiet).
362\end{methoddesc}
363
364\begin{methoddesc}{min}{other\optional{, context}}
365 Like \samp{min(self, other)} except that the context rounding rule
366 is applied before returning and that \constant{NaN} values are
367 either signalled or ignored (depending on the context and whether
368 they are signaling or quiet).
369\end{methoddesc}
370
371\begin{methoddesc}{normalize}{\optional{context}}
372 Normalize the number by stripping the rightmost trailing zeroes and
373 converting any result equal to \constant{Decimal("0")} to
374 \constant{Decimal("0e0")}. Used for producing canonical values for members
375 of an equivalence class. For example, \code{Decimal("32.100")} and
376 \code{Decimal("0.321000e+2")} both normalize to the equivalent value
377 \code{Decimal("32.1")}.
378\end{methoddesc}
379
380\begin{methoddesc}{quantize}
381 {exp \optional{, rounding\optional{, context\optional{, watchexp}}}}
382 Quantize makes the exponent the same as \var{exp}. Searches for a
383 rounding method in \var{rounding}, then in \var{context}, and then
384 in the current context.
385
386 If \var{watchexp} is set (default), then an error is returned whenever
387 the resulting exponent is greater than \member{Emax} or less than
388 \member{Etiny}.
389\end{methoddesc}
390
391\begin{methoddesc}{remainder_near}{other\optional{, context}}
392 Computes the modulo as either a positive or negative value depending
393 on which is closest to zero. For instance,
394 \samp{Decimal(10).remainder_near(6)} returns \code{Decimal("-2")}
395 which is closer to zero than \code{Decimal("4")}.
396
397 If both are equally close, the one chosen will have the same sign
398 as \var{self}.
399\end{methoddesc}
400
401\begin{methoddesc}{same_quantum}{other\optional{, context}}
402 Test whether self and other have the same exponent or whether both
403 are \constant{NaN}.
404\end{methoddesc}
405
406\begin{methoddesc}{sqrt}{\optional{context}}
407 Return the square root to full precision.
408\end{methoddesc}
409
410\begin{methoddesc}{to_eng_string}{\optional{context}}
411 Convert to an engineering-type string.
412
413 Engineering notation has an exponent which is a multiple of 3, so there
414 are up to 3 digits left of the decimal place. For example, converts
415 \code{Decimal('123E+1')} to \code{Decimal("1.23E+3")}
416\end{methoddesc}
417
418\begin{methoddesc}{to_integral}{\optional{rounding\optional{, context}}}
419 Rounds to the nearest integer without signaling \constant{Inexact}
420 or \constant{Rounded}. If given, applies \var{rounding}; otherwise,
421 uses the rounding method in either the supplied \var{context} or the
422 current context.
423\end{methoddesc}
424
425
426
427%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
428\subsection{Context objects \label{decimal-decimal}}
429
430Contexts are environments for arithmetic operations. They govern precision,
431set rules for rounding, determine which signals are treated as exceptions, and
432limit the range for exponents.
433
434Each thread has its own current context which is accessed or changed using
435the \function{getcontext()} and \function{setcontext()} functions:
436
437\begin{funcdesc}{getcontext}{}
438 Return the current context for the active thread.
439\end{funcdesc}
440
441\begin{funcdesc}{setcontext}{c}
442 Set the current context for the active thread to \var{c}.
443\end{funcdesc}
444
445Beginning with Python 2.5, you can also use the \keyword{with} statement
446and the \function{localcontext()} function to temporarily change the
447active context.
448
449\begin{funcdesc}{localcontext}{\optional{c}}
450 Return a context manager that will set the current context for
451 the active thread to a copy of \var{c} on entry to the with-statement
452 and restore the previous context when exiting the with-statement. If
453 no context is specified, a copy of the current context is used.
454 \versionadded{2.5}
455
456 For example, the following code sets the current decimal precision
457 to 42 places, performs a calculation, and then automatically restores
458 the previous context:
459\begin{verbatim}
460 from __future__ import with_statement
461 from decimal import localcontext
462
463 with localcontext() as ctx:
464 ctx.prec = 42 # Perform a high precision calculation
465 s = calculate_something()
466 s = +s # Round the final result back to the default precision
467\end{verbatim}
468\end{funcdesc}
469
470New contexts can also be created using the \class{Context} constructor
471described below. In addition, the module provides three pre-made
472contexts:
473
474\begin{classdesc*}{BasicContext}
475 This is a standard context defined by the General Decimal Arithmetic
476 Specification. Precision is set to nine. Rounding is set to
477 \constant{ROUND_HALF_UP}. All flags are cleared. All traps are enabled
478 (treated as exceptions) except \constant{Inexact}, \constant{Rounded}, and
479 \constant{Subnormal}.
480
481 Because many of the traps are enabled, this context is useful for debugging.
482\end{classdesc*}
483
484\begin{classdesc*}{ExtendedContext}
485 This is a standard context defined by the General Decimal Arithmetic
486 Specification. Precision is set to nine. Rounding is set to
487 \constant{ROUND_HALF_EVEN}. All flags are cleared. No traps are enabled
488 (so that exceptions are not raised during computations).
489
490 Because the trapped are disabled, this context is useful for applications
491 that prefer to have result value of \constant{NaN} or \constant{Infinity}
492 instead of raising exceptions. This allows an application to complete a
493 run in the presence of conditions that would otherwise halt the program.
494\end{classdesc*}
495
496\begin{classdesc*}{DefaultContext}
497 This context is used by the \class{Context} constructor as a prototype for
498 new contexts. Changing a field (such a precision) has the effect of
499 changing the default for new contexts creating by the \class{Context}
500 constructor.
501
502 This context is most useful in multi-threaded environments. Changing one of
503 the fields before threads are started has the effect of setting system-wide
504 defaults. Changing the fields after threads have started is not recommended
505 as it would require thread synchronization to prevent race conditions.
506
507 In single threaded environments, it is preferable to not use this context
508 at all. Instead, simply create contexts explicitly as described below.
509
510 The default values are precision=28, rounding=ROUND_HALF_EVEN, and enabled
511 traps for Overflow, InvalidOperation, and DivisionByZero.
512\end{classdesc*}
513
514
515In addition to the three supplied contexts, new contexts can be created
516with the \class{Context} constructor.
517
518\begin{classdesc}{Context}{prec=None, rounding=None, traps=None,
519 flags=None, Emin=None, Emax=None, capitals=1}
520 Creates a new context. If a field is not specified or is \constant{None},
521 the default values are copied from the \constant{DefaultContext}. If the
522 \var{flags} field is not specified or is \constant{None}, all flags are
523 cleared.
524
525 The \var{prec} field is a positive integer that sets the precision for
526 arithmetic operations in the context.
527
528 The \var{rounding} option is one of:
529 \begin{itemize}
530 \item \constant{ROUND_CEILING} (towards \constant{Infinity}),
531 \item \constant{ROUND_DOWN} (towards zero),
532 \item \constant{ROUND_FLOOR} (towards \constant{-Infinity}),
533 \item \constant{ROUND_HALF_DOWN} (to nearest with ties going towards zero),
534 \item \constant{ROUND_HALF_EVEN} (to nearest with ties going to nearest even integer),
535 \item \constant{ROUND_HALF_UP} (to nearest with ties going away from zero), or
536 \item \constant{ROUND_UP} (away from zero).
537 \end{itemize}
538
539 The \var{traps} and \var{flags} fields list any signals to be set.
540 Generally, new contexts should only set traps and leave the flags clear.
541
542 The \var{Emin} and \var{Emax} fields are integers specifying the outer
543 limits allowable for exponents.
544
545 The \var{capitals} field is either \constant{0} or \constant{1} (the
546 default). If set to \constant{1}, exponents are printed with a capital
547 \constant{E}; otherwise, a lowercase \constant{e} is used:
548 \constant{Decimal('6.02e+23')}.
549\end{classdesc}
550
551The \class{Context} class defines several general purpose methods as well as a
552large number of methods for doing arithmetic directly in a given context.
553
554\begin{methoddesc}{clear_flags}{}
555 Resets all of the flags to \constant{0}.
556\end{methoddesc}
557
558\begin{methoddesc}{copy}{}
559 Return a duplicate of the context.
560\end{methoddesc}
561
562\begin{methoddesc}{create_decimal}{num}
563 Creates a new Decimal instance from \var{num} but using \var{self} as
564 context. Unlike the \class{Decimal} constructor, the context precision,
565 rounding method, flags, and traps are applied to the conversion.
566
567 This is useful because constants are often given to a greater precision than
568 is needed by the application. Another benefit is that rounding immediately
569 eliminates unintended effects from digits beyond the current precision.
570 In the following example, using unrounded inputs means that adding zero
571 to a sum can change the result:
572
573 \begin{verbatim}
574 >>> getcontext().prec = 3
575 >>> Decimal("3.4445") + Decimal("1.0023")
576 Decimal("4.45")
577 >>> Decimal("3.4445") + Decimal(0) + Decimal("1.0023")
578 Decimal("4.44")
579 \end{verbatim}
580
581\end{methoddesc}
582
583\begin{methoddesc}{Etiny}{}
584 Returns a value equal to \samp{Emin - prec + 1} which is the minimum
585 exponent value for subnormal results. When underflow occurs, the
586 exponent is set to \constant{Etiny}.
587\end{methoddesc}
588
589\begin{methoddesc}{Etop}{}
590 Returns a value equal to \samp{Emax - prec + 1}.
591\end{methoddesc}
592
593
594The usual approach to working with decimals is to create \class{Decimal}
595instances and then apply arithmetic operations which take place within the
596current context for the active thread. An alternate approach is to use
597context methods for calculating within a specific context. The methods are
598similar to those for the \class{Decimal} class and are only briefly recounted
599here.
600
601\begin{methoddesc}{abs}{x}
602 Returns the absolute value of \var{x}.
603\end{methoddesc}
604
605\begin{methoddesc}{add}{x, y}
606 Return the sum of \var{x} and \var{y}.
607\end{methoddesc}
608
609\begin{methoddesc}{compare}{x, y}
610 Compares values numerically.
611
612 Like \method{__cmp__()} but returns a decimal instance:
613 \begin{verbatim}
614 a or b is a NaN ==> Decimal("NaN")
615 a < b ==> Decimal("-1")
616 a == b ==> Decimal("0")
617 a > b ==> Decimal("1")
618 \end{verbatim}
619\end{methoddesc}
620
621\begin{methoddesc}{divide}{x, y}
622 Return \var{x} divided by \var{y}.
623\end{methoddesc}
624
625\begin{methoddesc}{divmod}{x, y}
626 Divides two numbers and returns the integer part of the result.
627\end{methoddesc}
628
629\begin{methoddesc}{max}{x, y}
630 Compare two values numerically and return the maximum.
631
632 If they are numerically equal then the left-hand operand is chosen as the
633 result.
634\end{methoddesc}
635
636\begin{methoddesc}{min}{x, y}
637 Compare two values numerically and return the minimum.
638
639 If they are numerically equal then the left-hand operand is chosen as the
640 result.
641\end{methoddesc}
642
643\begin{methoddesc}{minus}{x}
644 Minus corresponds to the unary prefix minus operator in Python.
645\end{methoddesc}
646
647\begin{methoddesc}{multiply}{x, y}
648 Return the product of \var{x} and \var{y}.
649\end{methoddesc}
650
651\begin{methoddesc}{normalize}{x}
652 Normalize reduces an operand to its simplest form.
653
654 Essentially a \method{plus} operation with all trailing zeros removed from
655 the result.
656\end{methoddesc}
657
658\begin{methoddesc}{plus}{x}
659 Plus corresponds to the unary prefix plus operator in Python. This
660 operation applies the context precision and rounding, so it is
661 \emph{not} an identity operation.
662\end{methoddesc}
663
664\begin{methoddesc}{power}{x, y\optional{, modulo}}
665 Return \samp{x ** y} to the \var{modulo} if given.
666
667 The right-hand operand must be a whole number whose integer part (after any
668 exponent has been applied) has no more than 9 digits and whose fractional
669 part (if any) is all zeros before any rounding. The operand may be positive,
670 negative, or zero; if negative, the absolute value of the power is used, and
671 the left-hand operand is inverted (divided into 1) before use.
672
673 If the increased precision needed for the intermediate calculations exceeds
674 the capabilities of the implementation then an \constant{InvalidOperation}
675 condition is signaled.
676
677 If, when raising to a negative power, an underflow occurs during the
678 division into 1, the operation is not halted at that point but continues.
679\end{methoddesc}
680
681\begin{methoddesc}{quantize}{x, y}
682 Returns a value equal to \var{x} after rounding and having the exponent of
683 \var{y}.
684
685 Unlike other operations, if the length of the coefficient after the quantize
686 operation would be greater than precision, then an
687 \constant{InvalidOperation} is signaled. This guarantees that, unless there
688 is an error condition, the quantized exponent is always equal to that of the
689 right-hand operand.
690
691 Also unlike other operations, quantize never signals Underflow, even
692 if the result is subnormal and inexact.
693\end{methoddesc}
694
695\begin{methoddesc}{remainder}{x, y}
696 Returns the remainder from integer division.
697
698 The sign of the result, if non-zero, is the same as that of the original
699 dividend.
700\end{methoddesc}
701
702\begin{methoddesc}{remainder_near}{x, y}
703 Computed the modulo as either a positive or negative value depending
704 on which is closest to zero. For instance,
705 \samp{Decimal(10).remainder_near(6)} returns \code{Decimal("-2")}
706 which is closer to zero than \code{Decimal("4")}.
707
708 If both are equally close, the one chosen will have the same sign
709 as \var{self}.
710\end{methoddesc}
711
712\begin{methoddesc}{same_quantum}{x, y}
713 Test whether \var{x} and \var{y} have the same exponent or whether both are
714 \constant{NaN}.
715\end{methoddesc}
716
717\begin{methoddesc}{sqrt}{x}
718 Return the square root of \var{x} to full precision.
719\end{methoddesc}
720
721\begin{methoddesc}{subtract}{x, y}
722 Return the difference between \var{x} and \var{y}.
723\end{methoddesc}
724
725\begin{methoddesc}{to_eng_string}{}
726 Convert to engineering-type string.
727
728 Engineering notation has an exponent which is a multiple of 3, so there
729 are up to 3 digits left of the decimal place. For example, converts
730 \code{Decimal('123E+1')} to \code{Decimal("1.23E+3")}
731\end{methoddesc}
732
733\begin{methoddesc}{to_integral}{x}
734 Rounds to the nearest integer without signaling \constant{Inexact}
735 or \constant{Rounded}.
736\end{methoddesc}
737
738\begin{methoddesc}{to_sci_string}{x}
739 Converts a number to a string using scientific notation.
740\end{methoddesc}
741
742
743
744%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
745\subsection{Signals \label{decimal-signals}}
746
747Signals represent conditions that arise during computation.
748Each corresponds to one context flag and one context trap enabler.
749
750The context flag is incremented whenever the condition is encountered.
751After the computation, flags may be checked for informational
752purposes (for instance, to determine whether a computation was exact).
753After checking the flags, be sure to clear all flags before starting
754the next computation.
755
756If the context's trap enabler is set for the signal, then the condition
757causes a Python exception to be raised. For example, if the
758\class{DivisionByZero} trap is set, then a \exception{DivisionByZero}
759exception is raised upon encountering the condition.
760
761
762\begin{classdesc*}{Clamped}
763 Altered an exponent to fit representation constraints.
764
765 Typically, clamping occurs when an exponent falls outside the context's
766 \member{Emin} and \member{Emax} limits. If possible, the exponent is
767 reduced to fit by adding zeroes to the coefficient.
768\end{classdesc*}
769
770\begin{classdesc*}{DecimalException}
771 Base class for other signals and a subclass of
772 \exception{ArithmeticError}.
773\end{classdesc*}
774
775\begin{classdesc*}{DivisionByZero}
776 Signals the division of a non-infinite number by zero.
777
778 Can occur with division, modulo division, or when raising a number to a
779 negative power. If this signal is not trapped, returns
780 \constant{Infinity} or \constant{-Infinity} with the sign determined by
781 the inputs to the calculation.
782\end{classdesc*}
783
784\begin{classdesc*}{Inexact}
785 Indicates that rounding occurred and the result is not exact.
786
787 Signals when non-zero digits were discarded during rounding. The rounded
788 result is returned. The signal flag or trap is used to detect when
789 results are inexact.
790\end{classdesc*}
791
792\begin{classdesc*}{InvalidOperation}
793 An invalid operation was performed.
794
795 Indicates that an operation was requested that does not make sense.
796 If not trapped, returns \constant{NaN}. Possible causes include:
797
798 \begin{verbatim}
799 Infinity - Infinity
800 0 * Infinity
801 Infinity / Infinity
802 x % 0
803 Infinity % x
804 x._rescale( non-integer )
805 sqrt(-x) and x > 0
806 0 ** 0
807 x ** (non-integer)
808 x ** Infinity
809 \end{verbatim}
810\end{classdesc*}
811
812\begin{classdesc*}{Overflow}
813 Numerical overflow.
814
815 Indicates the exponent is larger than \member{Emax} after rounding has
816 occurred. If not trapped, the result depends on the rounding mode, either
817 pulling inward to the largest representable finite number or rounding
818 outward to \constant{Infinity}. In either case, \class{Inexact} and
819 \class{Rounded} are also signaled.
820\end{classdesc*}
821
822\begin{classdesc*}{Rounded}
823 Rounding occurred though possibly no information was lost.
824
825 Signaled whenever rounding discards digits; even if those digits are
826 zero (such as rounding \constant{5.00} to \constant{5.0}). If not
827 trapped, returns the result unchanged. This signal is used to detect
828 loss of significant digits.
829\end{classdesc*}
830
831\begin{classdesc*}{Subnormal}
832 Exponent was lower than \member{Emin} prior to rounding.
833
834 Occurs when an operation result is subnormal (the exponent is too small).
835 If not trapped, returns the result unchanged.
836\end{classdesc*}
837
838\begin{classdesc*}{Underflow}
839 Numerical underflow with result rounded to zero.
840
841 Occurs when a subnormal result is pushed to zero by rounding.
842 \class{Inexact} and \class{Subnormal} are also signaled.
843\end{classdesc*}
844
845The following table summarizes the hierarchy of signals:
846
847\begin{verbatim}
848 exceptions.ArithmeticError(exceptions.StandardError)
849 DecimalException
850 Clamped
851 DivisionByZero(DecimalException, exceptions.ZeroDivisionError)
852 Inexact
853 Overflow(Inexact, Rounded)
854 Underflow(Inexact, Rounded, Subnormal)
855 InvalidOperation
856 Rounded
857 Subnormal
858\end{verbatim}
859
860
861%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
862\subsection{Floating Point Notes \label{decimal-notes}}
863
864\subsubsection{Mitigating round-off error with increased precision}
865
866The use of decimal floating point eliminates decimal representation error
867(making it possible to represent \constant{0.1} exactly); however, some
868operations can still incur round-off error when non-zero digits exceed the
869fixed precision.
870
871The effects of round-off error can be amplified by the addition or subtraction
872of nearly offsetting quantities resulting in loss of significance. Knuth
873provides two instructive examples where rounded floating point arithmetic with
874insufficient precision causes the breakdown of the associative and
875distributive properties of addition:
876
877\begin{verbatim}
878# Examples from Seminumerical Algorithms, Section 4.2.2.
879>>> from decimal import Decimal, getcontext
880>>> getcontext().prec = 8
881
882>>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
883>>> (u + v) + w
884Decimal("9.5111111")
885>>> u + (v + w)
886Decimal("10")
887
888>>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
889>>> (u*v) + (u*w)
890Decimal("0.01")
891>>> u * (v+w)
892Decimal("0.0060000")
893\end{verbatim}
894
895The \module{decimal} module makes it possible to restore the identities
896by expanding the precision sufficiently to avoid loss of significance:
897
898\begin{verbatim}
899>>> getcontext().prec = 20
900>>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
901>>> (u + v) + w
902Decimal("9.51111111")
903>>> u + (v + w)
904Decimal("9.51111111")
905>>>
906>>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
907>>> (u*v) + (u*w)
908Decimal("0.0060000")
909>>> u * (v+w)
910Decimal("0.0060000")
911\end{verbatim}
912
913\subsubsection{Special values}
914
915The number system for the \module{decimal} module provides special
916values including \constant{NaN}, \constant{sNaN}, \constant{-Infinity},
917\constant{Infinity}, and two zeroes, \constant{+0} and \constant{-0}.
918
919Infinities can be constructed directly with: \code{Decimal('Infinity')}. Also,
920they can arise from dividing by zero when the \exception{DivisionByZero}
921signal is not trapped. Likewise, when the \exception{Overflow} signal is not
922trapped, infinity can result from rounding beyond the limits of the largest
923representable number.
924
925The infinities are signed (affine) and can be used in arithmetic operations
926where they get treated as very large, indeterminate numbers. For instance,
927adding a constant to infinity gives another infinite result.
928
929Some operations are indeterminate and return \constant{NaN}, or if the
930\exception{InvalidOperation} signal is trapped, raise an exception. For
931example, \code{0/0} returns \constant{NaN} which means ``not a number''. This
932variety of \constant{NaN} is quiet and, once created, will flow through other
933computations always resulting in another \constant{NaN}. This behavior can be
934useful for a series of computations that occasionally have missing inputs ---
935it allows the calculation to proceed while flagging specific results as
936invalid.
937
938A variant is \constant{sNaN} which signals rather than remaining quiet
939after every operation. This is a useful return value when an invalid
940result needs to interrupt a calculation for special handling.
941
942The signed zeros can result from calculations that underflow.
943They keep the sign that would have resulted if the calculation had
944been carried out to greater precision. Since their magnitude is
945zero, both positive and negative zeros are treated as equal and their
946sign is informational.
947
948In addition to the two signed zeros which are distinct yet equal,
949there are various representations of zero with differing precisions
950yet equivalent in value. This takes a bit of getting used to. For
951an eye accustomed to normalized floating point representations, it
952is not immediately obvious that the following calculation returns
953a value equal to zero:
954
955\begin{verbatim}
956>>> 1 / Decimal('Infinity')
957Decimal("0E-1000000026")
958\end{verbatim}
959
960%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
961\subsection{Working with threads \label{decimal-threads}}
962
963The \function{getcontext()} function accesses a different \class{Context}
964object for each thread. Having separate thread contexts means that threads
965may make changes (such as \code{getcontext.prec=10}) without interfering with
966other threads.
967
968Likewise, the \function{setcontext()} function automatically assigns its target
969to the current thread.
970
971If \function{setcontext()} has not been called before \function{getcontext()},
972then \function{getcontext()} will automatically create a new context for use
973in the current thread.
974
975The new context is copied from a prototype context called
976\var{DefaultContext}. To control the defaults so that each thread will use the
977same values throughout the application, directly modify the
978\var{DefaultContext} object. This should be done \emph{before} any threads are
979started so that there won't be a race condition between threads calling
980\function{getcontext()}. For example:
981
982\begin{verbatim}
983# Set applicationwide defaults for all threads about to be launched
984DefaultContext.prec = 12
985DefaultContext.rounding = ROUND_DOWN
986DefaultContext.traps = ExtendedContext.traps.copy()
987DefaultContext.traps[InvalidOperation] = 1
988setcontext(DefaultContext)
989
990# Afterwards, the threads can be started
991t1.start()
992t2.start()
993t3.start()
994 . . .
995\end{verbatim}
996
997
998
999%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1000\subsection{Recipes \label{decimal-recipes}}
1001
1002Here are a few recipes that serve as utility functions and that demonstrate
1003ways to work with the \class{Decimal} class:
1004
1005\begin{verbatim}
1006def moneyfmt(value, places=2, curr='', sep=',', dp='.',
1007 pos='', neg='-', trailneg=''):
1008 """Convert Decimal to a money formatted string.
1009
1010 places: required number of places after the decimal point
1011 curr: optional currency symbol before the sign (may be blank)
1012 sep: optional grouping separator (comma, period, space, or blank)
1013 dp: decimal point indicator (comma or period)
1014 only specify as blank when places is zero
1015 pos: optional sign for positive numbers: '+', space or blank
1016 neg: optional sign for negative numbers: '-', '(', space or blank
1017 trailneg:optional trailing minus indicator: '-', ')', space or blank
1018
1019 >>> d = Decimal('-1234567.8901')
1020 >>> moneyfmt(d, curr='$')
1021 '-$1,234,567.89'
1022 >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')
1023 '1.234.568-'
1024 >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
1025 '($1,234,567.89)'
1026 >>> moneyfmt(Decimal(123456789), sep=' ')
1027 '123 456 789.00'
1028 >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
1029 '<.02>'
1030
1031 """
1032 q = Decimal((0, (1,), -places)) # 2 places --> '0.01'
1033 sign, digits, exp = value.quantize(q).as_tuple()
1034 assert exp == -places
1035 result = []
1036 digits = map(str, digits)
1037 build, next = result.append, digits.pop
1038 if sign:
1039 build(trailneg)
1040 for i in range(places):
1041 if digits:
1042 build(next())
1043 else:
1044 build('0')
1045 build(dp)
1046 i = 0
1047 while digits:
1048 build(next())
1049 i += 1
1050 if i == 3 and digits:
1051 i = 0
1052 build(sep)
1053 build(curr)
1054 if sign:
1055 build(neg)
1056 else:
1057 build(pos)
1058 result.reverse()
1059 return ''.join(result)
1060
1061def pi():
1062 """Compute Pi to the current precision.
1063
1064 >>> print pi()
1065 3.141592653589793238462643383
1066
1067 """
1068 getcontext().prec += 2 # extra digits for intermediate steps
1069 three = Decimal(3) # substitute "three=3.0" for regular floats
1070 lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
1071 while s != lasts:
1072 lasts = s
1073 n, na = n+na, na+8
1074 d, da = d+da, da+32
1075 t = (t * n) / d
1076 s += t
1077 getcontext().prec -= 2
1078 return +s # unary plus applies the new precision
1079
1080def exp(x):
1081 """Return e raised to the power of x. Result type matches input type.
1082
1083 >>> print exp(Decimal(1))
1084 2.718281828459045235360287471
1085 >>> print exp(Decimal(2))
1086 7.389056098930650227230427461
1087 >>> print exp(2.0)
1088 7.38905609893
1089 >>> print exp(2+0j)
1090 (7.38905609893+0j)
1091
1092 """
1093 getcontext().prec += 2
1094 i, lasts, s, fact, num = 0, 0, 1, 1, 1
1095 while s != lasts:
1096 lasts = s
1097 i += 1
1098 fact *= i
1099 num *= x
1100 s += num / fact
1101 getcontext().prec -= 2
1102 return +s
1103
1104def cos(x):
1105 """Return the cosine of x as measured in radians.
1106
1107 >>> print cos(Decimal('0.5'))
1108 0.8775825618903727161162815826
1109 >>> print cos(0.5)
1110 0.87758256189
1111 >>> print cos(0.5+0j)
1112 (0.87758256189+0j)
1113
1114 """
1115 getcontext().prec += 2
1116 i, lasts, s, fact, num, sign = 0, 0, 1, 1, 1, 1
1117 while s != lasts:
1118 lasts = s
1119 i += 2
1120 fact *= i * (i-1)
1121 num *= x * x
1122 sign *= -1
1123 s += num / fact * sign
1124 getcontext().prec -= 2
1125 return +s
1126
1127def sin(x):
1128 """Return the sine of x as measured in radians.
1129
1130 >>> print sin(Decimal('0.5'))
1131 0.4794255386042030002732879352
1132 >>> print sin(0.5)
1133 0.479425538604
1134 >>> print sin(0.5+0j)
1135 (0.479425538604+0j)
1136
1137 """
1138 getcontext().prec += 2
1139 i, lasts, s, fact, num, sign = 1, 0, x, 1, x, 1
1140 while s != lasts:
1141 lasts = s
1142 i += 2
1143 fact *= i * (i-1)
1144 num *= x * x
1145 sign *= -1
1146 s += num / fact * sign
1147 getcontext().prec -= 2
1148 return +s
1149
1150\end{verbatim}
1151
1152
1153
1154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1155\subsection{Decimal FAQ \label{decimal-faq}}
1156
1157Q. It is cumbersome to type \code{decimal.Decimal('1234.5')}. Is there a way
1158to minimize typing when using the interactive interpreter?
1159
1160A. Some users abbreviate the constructor to just a single letter:
1161
1162\begin{verbatim}
1163>>> D = decimal.Decimal
1164>>> D('1.23') + D('3.45')
1165Decimal("4.68")
1166\end{verbatim}
1167
1168
1169Q. In a fixed-point application with two decimal places, some inputs
1170have many places and need to be rounded. Others are not supposed to have
1171excess digits and need to be validated. What methods should be used?
1172
1173A. The \method{quantize()} method rounds to a fixed number of decimal places.
1174If the \constant{Inexact} trap is set, it is also useful for validation:
1175
1176\begin{verbatim}
1177>>> TWOPLACES = Decimal(10) ** -2 # same as Decimal('0.01')
1178
1179>>> # Round to two places
1180>>> Decimal("3.214").quantize(TWOPLACES)
1181Decimal("3.21")
1182
1183>>> # Validate that a number does not exceed two places
1184>>> Decimal("3.21").quantize(TWOPLACES, context=Context(traps=[Inexact]))
1185Decimal("3.21")
1186
1187>>> Decimal("3.214").quantize(TWOPLACES, context=Context(traps=[Inexact]))
1188Traceback (most recent call last):
1189 ...
1190Inexact: Changed in rounding
1191\end{verbatim}
1192
1193
1194Q. Once I have valid two place inputs, how do I maintain that invariant
1195throughout an application?
1196
1197A. Some operations like addition and subtraction automatically preserve fixed
1198point. Others, like multiplication and division, change the number of decimal
1199places and need to be followed-up with a \method{quantize()} step.
1200
1201
1202Q. There are many ways to express the same value. The numbers
1203\constant{200}, \constant{200.000}, \constant{2E2}, and \constant{.02E+4} all
1204have the same value at various precisions. Is there a way to transform them to
1205a single recognizable canonical value?
1206
1207A. The \method{normalize()} method maps all equivalent values to a single
1208representative:
1209
1210\begin{verbatim}
1211>>> values = map(Decimal, '200 200.000 2E2 .02E+4'.split())
1212>>> [v.normalize() for v in values]
1213[Decimal("2E+2"), Decimal("2E+2"), Decimal("2E+2"), Decimal("2E+2")]
1214\end{verbatim}
1215
1216
1217Q. Some decimal values always print with exponential notation. Is there
1218a way to get a non-exponential representation?
1219
1220A. For some values, exponential notation is the only way to express
1221the number of significant places in the coefficient. For example,
1222expressing \constant{5.0E+3} as \constant{5000} keeps the value
1223constant but cannot show the original's two-place significance.
1224
1225
1226Q. Is there a way to convert a regular float to a \class{Decimal}?
1227
1228A. Yes, all binary floating point numbers can be exactly expressed as a
1229Decimal. An exact conversion may take more precision than intuition would
1230suggest, so trapping \constant{Inexact} will signal a need for more precision:
1231
1232\begin{verbatim}
1233def floatToDecimal(f):
1234 "Convert a floating point number to a Decimal with no loss of information"
1235 # Transform (exactly) a float to a mantissa (0.5 <= abs(m) < 1.0) and an
1236 # exponent. Double the mantissa until it is an integer. Use the integer
1237 # mantissa and exponent to compute an equivalent Decimal. If this cannot
1238 # be done exactly, then retry with more precision.
1239
1240 mantissa, exponent = math.frexp(f)
1241 while mantissa != int(mantissa):
1242 mantissa *= 2.0
1243 exponent -= 1
1244 mantissa = int(mantissa)
1245
1246 oldcontext = getcontext()
1247 setcontext(Context(traps=[Inexact]))
1248 try:
1249 while True:
1250 try:
1251 return mantissa * Decimal(2) ** exponent
1252 except Inexact:
1253 getcontext().prec += 1
1254 finally:
1255 setcontext(oldcontext)
1256\end{verbatim}
1257
1258
1259Q. Why isn't the \function{floatToDecimal()} routine included in the module?
1260
1261A. There is some question about whether it is advisable to mix binary and
1262decimal floating point. Also, its use requires some care to avoid the
1263representation issues associated with binary floating point:
1264
1265\begin{verbatim}
1266>>> floatToDecimal(1.1)
1267Decimal("1.100000000000000088817841970012523233890533447265625")
1268\end{verbatim}
1269
1270
1271Q. Within a complex calculation, how can I make sure that I haven't gotten a
1272spurious result because of insufficient precision or rounding anomalies.
1273
1274A. The decimal module makes it easy to test results. A best practice is to
1275re-run calculations using greater precision and with various rounding modes.
1276Widely differing results indicate insufficient precision, rounding mode
1277issues, ill-conditioned inputs, or a numerically unstable algorithm.
1278
1279
1280Q. I noticed that context precision is applied to the results of operations
1281but not to the inputs. Is there anything to watch out for when mixing
1282values of different precisions?
1283
1284A. Yes. The principle is that all values are considered to be exact and so
1285is the arithmetic on those values. Only the results are rounded. The
1286advantage for inputs is that ``what you type is what you get''. A
1287disadvantage is that the results can look odd if you forget that the inputs
1288haven't been rounded:
1289
1290\begin{verbatim}
1291>>> getcontext().prec = 3
1292>>> Decimal('3.104') + D('2.104')
1293Decimal("5.21")
1294>>> Decimal('3.104') + D('0.000') + D('2.104')
1295Decimal("5.20")
1296\end{verbatim}
1297
1298The solution is either to increase precision or to force rounding of inputs
1299using the unary plus operation:
1300
1301\begin{verbatim}
1302>>> getcontext().prec = 3
1303>>> +Decimal('1.23456789') # unary plus triggers rounding
1304Decimal("1.23")
1305\end{verbatim}
1306
1307Alternatively, inputs can be rounded upon creation using the
1308\method{Context.create_decimal()} method:
1309
1310\begin{verbatim}
1311>>> Context(prec=5, rounding=ROUND_DOWN).create_decimal('1.2345678')
1312Decimal("1.2345")
1313\end{verbatim}
Note: See TracBrowser for help on using the repository browser.