diff options
Diffstat (limited to 'Lib/decimal.py')
| -rw-r--r-- | Lib/decimal.py | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py index 197269c7d7..baff38bb5a 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -655,7 +655,8 @@ class Decimal(_numbers.Real):          raise TypeError("Cannot convert %r to Decimal" % value) -    @classmethod +    # @classmethod, but @decorator is not valid Python 2.3 syntax, so +    # don't use it (see notes on Py2.3 compatibility at top of file)      def from_float(cls, f):          """Converts a float to a decimal number, exactly. @@ -681,11 +682,18 @@ class Decimal(_numbers.Real):              return cls(f)          if _math.isinf(f) or _math.isnan(f):  # raises TypeError if not a float              return cls(repr(f)) -        sign = 0 if _math.copysign(1.0, f) == 1.0 else 1 +        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          result = _dec_from_triple(sign, str(n*5**k), -k) -        return result if cls is Decimal else cls(result) +        if cls is Decimal: +            return result +        else: +            return cls(result) +    from_float = classmethod(from_float)      def _isnan(self):          """Returns whether the number is not actually one.  | 
