diff options
author | Mark Dickinson <mdickinson@enthought.com> | 2011-03-12 11:12:52 (GMT) |
---|---|---|
committer | Mark Dickinson <mdickinson@enthought.com> | 2011-03-12 11:12:52 (GMT) |
commit | 37a79fb75b8f6d1833caee16c777d07b9338938f (patch) | |
tree | 5cb83acd730e2ac26c763ecf5d1928af5da172fc /Lib/decimal.py | |
parent | abd4a0556142e971c22d23243bacd3f0ad6d2299 (diff) | |
download | cpython-37a79fb75b8f6d1833caee16c777d07b9338938f.zip cpython-37a79fb75b8f6d1833caee16c777d07b9338938f.tar.gz cpython-37a79fb75b8f6d1833caee16c777d07b9338938f.tar.bz2 |
Issue 11131: Fix sign of zero result on decimal.Decimal plus and minus operations in ROUND_FLOOR rounding mode.
Diffstat (limited to 'Lib/decimal.py')
-rw-r--r-- | Lib/decimal.py | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py index c61b549..5e53d8e 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -1040,14 +1040,16 @@ class Decimal(object): if ans: return ans - if not self: - # -Decimal('0') is Decimal('0'), not Decimal('-0') + if context is None: + context = getcontext() + + if not self and context.rounding != ROUND_FLOOR: + # -Decimal('0') is Decimal('0'), not Decimal('-0'), except + # in ROUND_FLOOR rounding mode. ans = self.copy_abs() else: ans = self.copy_negate() - if context is None: - context = getcontext() return ans._fix(context) def __pos__(self, context=None): @@ -1060,14 +1062,15 @@ class Decimal(object): if ans: return ans - if not self: - # + (-0) = 0 + if context is None: + context = getcontext() + + if not self and context.rounding != ROUND_FLOOR: + # + (-0) = 0, except in ROUND_FLOOR rounding mode. ans = self.copy_abs() else: ans = Decimal(self) - if context is None: - context = getcontext() return ans._fix(context) def __abs__(self, round=True, context=None): |