Index: fractions.py =================================================================== --- fractions.py (revision 64715) +++ fractions.py (working copy) @@ -138,6 +138,15 @@ else: return cls(digits, 10 ** -exp) + @classmethod + def from_any(cls, numerator=0, denominator=1): + """Lossless conversion to a Fraction including decimals and floats""" + if denominator == 1 and isinstance(numerator, Decimal): + return cls.from_decimal(numerator) + if denominator == 1 and isinstance(numerator, float): + return cls.from_float(numerator) + return cls(numerator, denominator) + def limit_denominator(self, max_denominator=1000000): """Closest Fraction to self with denominator at most max_denominator.