]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #12005: clarify behaviour of % and // for Decimal objects.
authorMark Dickinson <mdickinson@enthought.com>
Sun, 18 Nov 2012 10:20:28 +0000 (10:20 +0000)
committerMark Dickinson <mdickinson@enthought.com>
Sun, 18 Nov 2012 10:20:28 +0000 (10:20 +0000)
Doc/library/decimal.rst

index 697ae8770616d823eb272c84a830e43afd40f265..27e790e560a82f7cf9086a33c84db28c4cee8009 100644 (file)
@@ -375,6 +375,29 @@ Decimal objects
    compared, sorted, and coerced to another type (such as :class:`float` or
    :class:`long`).
 
+   There are some small differences between arithmetic on Decimal objects and
+   arithmetic on integers and floats.  When the remainder operator ``%`` is
+   applied to Decimal objects, the sign of the result is the sign of the
+   *dividend* rather than the sign of the divisor::
+
+      >>> (-7) % 4
+      1
+      >>> Decimal(-7) % Decimal(4)
+      Decimal('-3')
+
+   The integer division operator ``//`` behaves analogously, returning the
+   integer part of the true quotient (truncating towards zero) rather than its
+   floor, so as to preseve the usual identity ``x == (x // y) * y + x % y``::
+
+      >>> -7 // 4
+      -2
+      >>> Decimal(-7) // Decimal(4)
+      Decimal('-1')
+
+   The ``%`` and ``//`` operators implement the ``remainder`` and
+   ``divide-integer`` operations (respectively) as described in the
+   specification.
+
    Decimal objects cannot generally be combined with floats in
    arithmetic operations: an attempt to add a :class:`Decimal` to a
    :class:`float`, for example, will raise a :exc:`TypeError`.