]> granicus.if.org Git - python/commitdiff
Put the parameter watchexp back in (changed watchexp from an int
authorFacundo Batista <facundobatista@gmail.com>
Thu, 13 Sep 2007 18:42:09 +0000 (18:42 +0000)
committerFacundo Batista <facundobatista@gmail.com>
Thu, 13 Sep 2007 18:42:09 +0000 (18:42 +0000)
to a bool).  Also second argument to watchexp is now converted
to Decimal, just as with all the other two-argument operations.

Thanks Mark Dickinson.

Lib/decimal.py

index 8543e1090a9a09d1e6743b113316adc60af5fcbb..b2bfc567a4e083acf8d9eb99be9d521e51600f98 100644 (file)
@@ -2160,12 +2160,13 @@ class Decimal(object):
             end -= 1
         return Decimal( (dup._sign, dup._int[:end], exp) )
 
-
-    def quantize(self, exp, rounding=None, context=None):
+    def quantize(self, exp, rounding=None, context=None, watchexp=True):
         """Quantize self so its exponent is the same as that of exp.
 
         Similar to self._rescale(exp._exp) but with error checking.
         """
+        exp = _convert_other(exp, raiseit=True)
+
         if context is None:
             context = getcontext()
         if rounding is None:
@@ -2182,6 +2183,16 @@ class Decimal(object):
                 return context._raise_error(InvalidOperation,
                                         'quantize with one INF')
 
+        # if we're not watching exponents, do a simple rescale
+        if not watchexp:
+            ans = self._rescale(exp._exp, rounding)
+            # raise Inexact and Rounded where appropriate
+            if ans._exp > self._exp:
+                context._raise_error(Rounded)
+                if ans != self:
+                    context._raise_error(Inexact)
+            return ans
+
         # exp._exp should be between Etiny and Emax
         if not (context.Etiny() <= exp._exp <= context.Emax):
             return context._raise_error(InvalidOperation,