gh-121798: Add class method Decimal.from_number() (GH-121801)

It is an alternate constructor which only accepts a single numeric argument.
Unlike to Decimal.from_float() it accepts also Decimal.
Unlike to the standard constructor, it does not accept strings and tuples.
This commit is contained in:
Serhiy Storchaka 2024-10-14 11:24:01 +03:00 committed by GitHub
parent 4b358ee647
commit 5217328f93
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 122 additions and 0 deletions

View file

@ -582,6 +582,21 @@ class Decimal(object):
raise TypeError("Cannot convert %r to Decimal" % value)
@classmethod
def from_number(cls, number):
"""Converts a real number to a decimal number, exactly.
>>> Decimal.from_number(314) # int
Decimal('314')
>>> Decimal.from_number(0.1) # float
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>> Decimal.from_number(Decimal('3.14')) # another decimal instance
Decimal('3.14')
"""
if isinstance(number, (int, Decimal, float)):
return cls(number)
raise TypeError("Cannot convert %r to Decimal" % number)
@classmethod
def from_float(cls, f):
"""Converts a float to a decimal number, exactly.