summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2004-11-24 07:28:48 (GMT)
committerRaymond Hettinger <python@rcn.com>2004-11-24 07:28:48 (GMT)
commit605ed0248375bbf87bbd1d80afc7c6918fd3ce2b (patch)
tree92c01fd62467bb05704330da04f0f4c9d468cf66
parent8f2c4eed93fd0aab1fbcce1e8e57ffea358c4901 (diff)
downloadcpython-605ed0248375bbf87bbd1d80afc7c6918fd3ce2b.zip
cpython-605ed0248375bbf87bbd1d80afc7c6918fd3ce2b.tar.gz
cpython-605ed0248375bbf87bbd1d80afc7c6918fd3ce2b.tar.bz2
SF bug #1071588 coercing decimal to int doesn't work between -1 and 1
-rw-r--r--Lib/decimal.py14
-rw-r--r--Lib/test/test_decimal.py8
2 files changed, 11 insertions, 11 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 6ffbd18..f9c065f 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -1410,14 +1410,14 @@ class Decimal(object):
return context._raise_error(InvalidContext)
elif self._isinfinity():
raise OverflowError, "Cannot convert infinity to long"
- if not self:
- return 0
- sign = '-'*self._sign
if self._exp >= 0:
- s = sign + ''.join(map(str, self._int)) + '0'*self._exp
- return int(s)
- s = sign + ''.join(map(str, self._int))[:self._exp]
- return int(s)
+ s = ''.join(map(str, self._int)) + '0'*self._exp
+ else:
+ s = ''.join(map(str, self._int))[:self._exp]
+ if s == '':
+ s = '0'
+ sign = '-'*self._sign
+ return int(sign + s)
def __long__(self):
"""Converts to a long.
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index a4e4041..06e8b9d 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -967,13 +967,13 @@ class DecimalPythonAPItests(unittest.TestCase):
self.assertEqual(d, e)
def test_int(self):
- data = '1.0 1.1 1.9 2.0 0.0 -1.0 -1.1 -1.9 -2.0'.split()
- for s in data:
+ for x in range(-250, 250):
+ s = '%0.2f' % (x / 100.0)
# should work the same as for floats
self.assertEqual(int(Decimal(s)), int(float(s)))
- # should work the same as ROUND_DOWN
+ # should work the same as to_integral in the ROUND_DOWN mode
d = Decimal(s)
- r = Context(prec=1, rounding=ROUND_DOWN).create_decimal(s)
+ r = d.to_integral(ROUND_DOWN)
self.assertEqual(Decimal(int(d)), r)
class ContextAPItests(unittest.TestCase):