Put the parameter watchexp back in (changed watchexp from an int

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.
This commit is contained in:
Facundo Batista 2007-09-13 18:42:09 +00:00
parent 353750c405
commit bd2fe839db
1 changed files with 13 additions and 2 deletions

View 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,