Mark Dickinson added the comment: Sorry: that was nonsense. trunc is fine---it's round, floor and ceil that fail on large arguments with this patch:
>>> import decimal, math >>> math.floor(decimal.Decimal("1e30")) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 1475, in __floor__ return trunc(self.quantize(Decimal(1), rounding=ROUND_FLOOR)) File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 2265, in quantize 'quantize result has too many digits for current context') File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 3546, in _raise_error raise error(explanation) decimal.InvalidOperation: quantize result has too many digits for current context >>> round(decimal.Decimal("1e30")) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 1487, in __round__ return trunc(self.quantize(Decimal(1), rounding=ROUND_HALF_EVEN)) File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 2265, in quantize 'quantize result has too many digits for current context') File "/Users/dickinsm/python_source/py3k/Lib/decimal.py", line 3546, in _raise_error raise error(explanation) decimal.InvalidOperation: quantize result has too many digits for current context >>> Can I suggest using _rescale instead of quantize? For example, def __round__(self, ndigits:_numbers.Integral=None): """Rounds self to ndigits decimal places, defaulting to 0. If ndigits is omitted or None, returns an int, otherwise a Decimal. Rounds half toward even.""" if ndigits is None: return trunc(self._rescale(0, rounding=ROUND_HALF_EVEN)) return self._rescale(-ndigits, rounding=ROUND_HALF_EVEN) __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1623> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com