Fix inconsistent behavior of Decimal.from_float

This commit is contained in:
Ankit Goel committed 2024-09-22 01:42:28 +01:00
1 parent 8cff0ed6c2
commit 5f75728ede
2 files changed
+16 -13

No files matched your search

+16 -11
View File
@@ -734,18 +734,23 @@ class Decimal(object):
"""
if isinstance(f, int): # handle integer inputs
return cls(f)
if not isinstance(f, float):
raise TypeError("argument must be int or float.")
if _math.isinf(f) or _math.isnan(f):
return cls(repr(f))
if _math.copysign(1.0, f) == 1.0:
sign = 0
sign = 0 if f >= 0 else 1
k = 0
coeff = str(abs(f))
elif isinstance(f, float):
if _math.isinf(f) or _math.isnan(f):
return cls(repr(f))
if _math.copysign(1.0, f) == 1.0:
sign = 0
else:
sign = 1
n, d = abs(f).as_integer_ratio()
k = d.bit_length() - 1
coeff = str(n*5**k)
else:
sign = 1
n, d = abs(f).as_integer_ratio()
k = d.bit_length() - 1
result = _dec_from_triple(sign, str(n*5**k), -k)
raise TypeError("argument must be int or float.")
result = _dec_from_triple(sign, coeff, -k)
if cls is Decimal:
return result
else:
-2
View File
@@ -1257,8 +1257,6 @@ class FormatTest:
self.assertEqual(format(Decimal('100000000.123'), 'n'),
'100\u066c000\u066c000\u066b123')
# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_decimal_from_float_argument_type(self):
class A(self.decimal.Decimal):
def __init__(self, a):