summaryrefslogtreecommitdiffstats
path: root/Lib/decimal.py
diff options
context:
space:
mode:
authorMark Dickinson <mdickinson@enthought.com>2011-03-12 11:12:52 (GMT)
committerMark Dickinson <mdickinson@enthought.com>2011-03-12 11:12:52 (GMT)
commit37a79fb75b8f6d1833caee16c777d07b9338938f (patch)
tree5cb83acd730e2ac26c763ecf5d1928af5da172fc /Lib/decimal.py
parentabd4a0556142e971c22d23243bacd3f0ad6d2299 (diff)
downloadcpython-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.py19
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):