您有两种选择:
- 用途
float.as_integer_ratio()
:>>> (0.25).as_integer_ratio()
(1, 4)
(从Python
3.6开始,您可以对
decimal.Decimal()对象执行相同的操作。)
- 使用
fractions.Fraction()
类型:>>> from fractions import Fraction
Fraction(0.25)
Fraction(1, 4)
后者具有非常有用的
str()转换:
>>> str(Fraction(0.25))'1/4'>>> print Fraction(0.25)1/4
由于浮点值可能不精确,因此您可能会得到“奇怪”的分数;限制分母以某种程度“简化”分数,方法是
Fraction.limit_denominator():
>>> Fraction(0.185)Fraction(3332663724254167, 18014398509481984)>>> Fraction(0.185).limit_denominator()Fraction(37, 200)
如果您仍在使用Python 2.6,则
Fraction()尚不支持
float直接传递,但是您 可以 将以上两种技术结合使用:
Fraction(*0.25.as_integer_ratio())
或者,您可以只使用
Fraction.from_float()class方法:
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是新的。



