]> granicus.if.org Git - python/commitdiff
Add fixed-point examples to the decimal FAQ
authorRaymond Hettinger <python@rcn.com>
Thu, 14 Feb 2008 10:46:57 +0000 (10:46 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 14 Feb 2008 10:46:57 +0000 (10:46 +0000)
Doc/library/decimal.rst

index 977e95dcdd2f6cc190a07826ad5d0f730350a42c..7af200c1cf2c9dd91d6969a8093c1ad55b333dd3 100644 (file)
@@ -1565,9 +1565,36 @@ the :const:`Inexact` trap is set, it is also useful for validation::
 Q. Once I have valid two place inputs, how do I maintain that invariant
 throughout an application?
 
-A. Some operations like addition and subtraction automatically preserve fixed
-point.  Others, like multiplication and division, change the number of decimal
-places and need to be followed-up with a :meth:`quantize` step.
+A. Some operations like addition, subtraction, and multiplication by an integer
+will automatically preserve fixed point.  Others operations, like division and
+non-integer multiplication, will change the number of decimal places and need to
+be followed-up with a :meth:`quantize` step.
+
+    >>> a = Decimal('102.72')           # Initial fixed-point values
+    >>> b = Decimal('3.17')
+    >>> a + b                           # Addition preserves fixed-point
+    Decimal('105.89')
+    >>> a - b
+    Decimal('99.55')
+    >>> a * 42                          # So does integer multiplication
+    Decimal('4314.24')
+    >>> (a * b).quantize(TWOPLACES)     # Must quantize non-integer multiplication
+    Decimal('325.62')
+    >>> (b / a).quantize(TWOPLACES)     # And quantize divisions
+    Decimal('0.03')
+
+In developing fixed-point applications, it is convenient to define functions
+to handle the :meth:`quantize` step::
+
+    def mul(x, y, fp=TWOPLACES):
+        return (x * y).quantize(fp)
+    def div(x, y, fp=TWOPLACES):
+        return (x / y).quantize(fp)
+
+    >>> mul(a, b)                       # Automatically preserve fixed-point
+    Decimal('325.62')
+    >>> div(b, a)
+    Decimal('0.03')
 
 Q. There are many ways to express the same value.  The numbers :const:`200`,
 :const:`200.000`, :const:`2E2`, and :const:`.02E+4` all have the same value at