一尘不染

如何将十进制数转换为分数?

python

我想知道如何在Python中将小数转换为最低形式的分数。

例如:

0.25  -> 1/4
0.5   -> 1/2
1.25  -> 5/4
3     -> 3/1

阅读 334

收藏
2020-12-20

共1个答案

一尘不染

您有两种选择:

  1. 用途float.as_integer_ratio()
    >>> (0.25).as_integer_ratio()
    

    (1, 4)

(从Python
3.6开始,您可以decimal.Decimal()对象执行相同的操作。)

  1. 使用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是新的。

2020-12-20