我想知道如何在Python中将小数转换为最低形式的分数。
例如:
0.25 -> 1/4 0.5 -> 1/2 1.25 -> 5/4 3 -> 3/1
您有两种选择:
float.as_integer_ratio()
>>> (0.25).as_integer_ratio()
(1, 4)
(从Python 3.6开始,您可以对decimal.Decimal()对象执行相同的操作。)
decimal.Decimal()
fractions.Fraction()
>>> from fractions import Fraction
Fraction(0.25) Fraction(1, 4)
后者具有非常有用的str()转换:
str()
>>> str(Fraction(0.25)) '1/4' >>> print Fraction(0.25) 1/4
由于浮点值可能不精确,因此您可能会得到“奇怪”的分数;限制分母以某种程度“简化”分数,方法是Fraction.limit_denominator():
Fraction.limit_denominator()
>>> Fraction(0.185) Fraction(3332663724254167, 18014398509481984) >>> Fraction(0.185).limit_denominator() Fraction(37, 200)
如果您仍在使用Python 2.6,则Fraction()尚不支持float直接传递,但是您 可以 将以上两种技术结合使用:
Fraction()
float
Fraction(*0.25.as_integer_ratio())
或者,您可以只使用Fraction.from_float()class方法:
Fraction.from_float()
Fraction.from_float(0.25)
本质上是做同样的事情,例如,取整数比元组并将其作为两个单独的参数传递。
以及一个带有示例值的小演示:
>>> for f in (0.25, 0.5, 1.25, 3.0): ... print f.as_integer_ratio() ... print repr(Fraction(f)), Fraction(f) ... (1, 4) Fraction(1, 4) 1/4 (1, 2) Fraction(1, 2) 1/2 (5, 4) Fraction(5, 4) 5/4 (3, 1) Fraction(3, 1) 3
无论是fractions模块和float.as_integer_ratio()方法在Python 2.6是新的。
fractions