diff Lib/decimal.py @ 50597:40ba2a1253fa

Merged revisions 68314 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r68314 | mark.dickinson | 2009-01-04 21:10:56 +0000 (Sun, 04 Jan 2009) | 5 lines Fix Decimal.from_float to use valid Python 2.3 syntax, as per comments at top of decimal.py. (But note that the from_float method itself with still not be usable before Python 2.7.) See issue 4796 for discussion. ........
author Mark Dickinson <dickinsm@gmail.com>
date Sun, 04 Jan 2009 21:17:43 +0000
parents 104005d07ea5
children 5436e534da6e
line wrap: on
line diff
--- a/Lib/decimal.py	Sun Jan 04 21:11:10 2009 +0000
+++ b/Lib/decimal.py	Sun Jan 04 21:17:43 2009 +0000
@@ -655,7 +655,8 @@
 
         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 @@
             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.