mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
SF bug #1071588 coercing decimal to int doesn't work between -1 and 1
This commit is contained in:
parent
8f2c4eed93
commit
605ed02483
2 changed files with 11 additions and 11 deletions
|
@ -1410,14 +1410,14 @@ class Decimal(object):
|
||||||
return context._raise_error(InvalidContext)
|
return context._raise_error(InvalidContext)
|
||||||
elif self._isinfinity():
|
elif self._isinfinity():
|
||||||
raise OverflowError, "Cannot convert infinity to long"
|
raise OverflowError, "Cannot convert infinity to long"
|
||||||
if not self:
|
|
||||||
return 0
|
|
||||||
sign = '-'*self._sign
|
|
||||||
if self._exp >= 0:
|
if self._exp >= 0:
|
||||||
s = sign + ''.join(map(str, self._int)) + '0'*self._exp
|
s = ''.join(map(str, self._int)) + '0'*self._exp
|
||||||
return int(s)
|
else:
|
||||||
s = sign + ''.join(map(str, self._int))[:self._exp]
|
s = ''.join(map(str, self._int))[:self._exp]
|
||||||
return int(s)
|
if s == '':
|
||||||
|
s = '0'
|
||||||
|
sign = '-'*self._sign
|
||||||
|
return int(sign + s)
|
||||||
|
|
||||||
def __long__(self):
|
def __long__(self):
|
||||||
"""Converts to a long.
|
"""Converts to a long.
|
||||||
|
|
|
@ -967,13 +967,13 @@ class DecimalPythonAPItests(unittest.TestCase):
|
||||||
self.assertEqual(d, e)
|
self.assertEqual(d, e)
|
||||||
|
|
||||||
def test_int(self):
|
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 x in range(-250, 250):
|
||||||
for s in data:
|
s = '%0.2f' % (x / 100.0)
|
||||||
# should work the same as for floats
|
# should work the same as for floats
|
||||||
self.assertEqual(int(Decimal(s)), int(float(s)))
|
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)
|
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)
|
self.assertEqual(Decimal(int(d)), r)
|
||||||
|
|
||||||
class ContextAPItests(unittest.TestCase):
|
class ContextAPItests(unittest.TestCase):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue