diff options
author | Raymond Hettinger <python@rcn.com> | 2004-07-01 11:52:15 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-07-01 11:52:15 (GMT) |
commit | 0fff62f9cd36709e9be9e4a69c001ad0a048b62f (patch) | |
tree | 0a1ee204feb02280a1d01a54c68dade226f2feb7 | |
parent | 75cc1cb7e082be959d9da1f3e8a4dba680ee5495 (diff) | |
download | cpython-0fff62f9cd36709e9be9e4a69c001ad0a048b62f.zip cpython-0fff62f9cd36709e9be9e4a69c001ad0a048b62f.tar.gz cpython-0fff62f9cd36709e9be9e4a69c001ad0a048b62f.tar.bz2 |
Move Decimal from the sandbox into production.
-rw-r--r-- | Doc/whatsnew/whatsnew24.tex | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Doc/whatsnew/whatsnew24.tex b/Doc/whatsnew/whatsnew24.tex index 4a67916..fd60621 100644 --- a/Doc/whatsnew/whatsnew24.tex +++ b/Doc/whatsnew/whatsnew24.tex @@ -201,6 +201,68 @@ root:*:0:0:System Administrator:/var/root:/bin/tcsh %====================================================================== +\section{PEP 327: Decimal Data Type} + +A new module, \module{decimal}, offers a \class{Decimal} data type for +decimal floating point arithmetic. Compared to the built-in \class{float} +type implemented with binary floating point, the new class is especially +useful for financial applications and other uses which require exact +decimal representation, control over precision, control over rounding +to meet legal or regulatory requirements, tracking of significant +decimal places, or for applications where the user expects the results +to match hand calculations done the way they were taught in school. + +For example, calculating a 5% tax on a 70 cent phone charge gives +different results in decimal floating point and binary floating point +with the difference being significant when rounding to the nearest +cent: + +\begin{verbatim} +>>> from decimal import * +>>> Decimal('0.70') * Decimal('1.05') +Decimal("0.7350") +>>> .70 * 1.05 +0.73499999999999999 +\end{verbatim} + +Note that the \class{Decimal} result keeps a trailing zero, automatically +inferring four place significance from two digit mulitiplicands. A key +goal is to reproduce the mathematics we do by hand and avoid the tricky +issues that arise when decimal numbers cannot be represented exactly in +binary floating point. + +Exact representation enables the \class{Decimal} class to perform +modulo calculations and equality tests that would fail in binary +floating point: + +\begin{verbatim} +>>> Decimal('1.00') % Decimal('.10') +Decimal("0.00") +>>> 1.00 % 0.10 +0.09999999999999995 + +>>> sum([Decimal('0.1')]*10) == Decimal('1.0') +True +>>> sum([0.1]*10) == 1.0 +False +\end{verbatim} + +The \module{decimal} module also allows arbitrarily large precisions to be +set for calculation: + +\begin{verbatim} +>>> getcontext().prec = 24 +>>> Decimal(1) / Decimal(7) +Decimal("0.142857142857142857142857") +\end{verbatim} + +\begin{seealso} +\seepep{327}{Decimal Data Type}{Written by Facundo Batista and implemented + by Eric Price, Facundo Bastista, Raymond Hettinger, Aahz, and Tim Peters.} +\end{seealso} + + +%====================================================================== \section{Other Language Changes} Here are all of the changes that Python 2.4 makes to the core Python |