mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
parent
c33ee85b6f
commit
6d1dece06d
3 changed files with 28 additions and 11 deletions
|
@ -734,9 +734,10 @@ class Decimal(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if isinstance(f, int): # handle integer inputs
|
if isinstance(f, int): # handle integer inputs
|
||||||
return cls(f)
|
sign = 0 if f >= 0 else 1
|
||||||
if not isinstance(f, float):
|
k = 0
|
||||||
raise TypeError("argument must be int or float.")
|
coeff = str(abs(f))
|
||||||
|
elif isinstance(f, float):
|
||||||
if _math.isinf(f) or _math.isnan(f):
|
if _math.isinf(f) or _math.isnan(f):
|
||||||
return cls(repr(f))
|
return cls(repr(f))
|
||||||
if _math.copysign(1.0, f) == 1.0:
|
if _math.copysign(1.0, f) == 1.0:
|
||||||
|
@ -745,7 +746,11 @@ class Decimal(object):
|
||||||
sign = 1
|
sign = 1
|
||||||
n, d = abs(f).as_integer_ratio()
|
n, d = abs(f).as_integer_ratio()
|
||||||
k = d.bit_length() - 1
|
k = d.bit_length() - 1
|
||||||
result = _dec_from_triple(sign, str(n*5**k), -k)
|
coeff = str(n*5**k)
|
||||||
|
else:
|
||||||
|
raise TypeError("argument must be int or float.")
|
||||||
|
|
||||||
|
result = _dec_from_triple(sign, coeff, -k)
|
||||||
if cls is Decimal:
|
if cls is Decimal:
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1185,6 +1185,16 @@ class FormatTest(unittest.TestCase):
|
||||||
self.assertEqual(format(Decimal('100000000.123'), 'n'),
|
self.assertEqual(format(Decimal('100000000.123'), 'n'),
|
||||||
'100\u066c000\u066c000\u066b123')
|
'100\u066c000\u066c000\u066b123')
|
||||||
|
|
||||||
|
def test_decimal_from_float_argument_type(self):
|
||||||
|
class A(self.decimal.Decimal):
|
||||||
|
def __init__(self, a):
|
||||||
|
self.a_type = type(a)
|
||||||
|
a = A.from_float(42.5)
|
||||||
|
self.assertEqual(self.decimal.Decimal, a.a_type)
|
||||||
|
|
||||||
|
a = A.from_float(42)
|
||||||
|
self.assertEqual(self.decimal.Decimal, a.a_type)
|
||||||
|
|
||||||
class CFormatTest(FormatTest):
|
class CFormatTest(FormatTest):
|
||||||
decimal = C
|
decimal = C
|
||||||
class PyFormatTest(FormatTest):
|
class PyFormatTest(FormatTest):
|
||||||
|
|
|
@ -10,6 +10,8 @@ What's New in Python 3.7.0 alpha 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- bpo-29534: Fixed different behaviour of Decimal.from_float() for _decimal and _pydecimal.
|
||||||
|
|
||||||
- bpo-29438: Fixed use-after-free problem in key sharing dict.
|
- bpo-29438: Fixed use-after-free problem in key sharing dict.
|
||||||
|
|
||||||
- Issue #29319: Prevent RunMainFromImporter overwriting sys.path[0].
|
- Issue #29319: Prevent RunMainFromImporter overwriting sys.path[0].
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue