获得最简化的分数

时间:2019-02-03 12:30:09

标签: python python-3.x fractions

我正在编写一个使用Fractions模块的程序。我想得到浮点数的最简化部分。当我使用0.5之类的数字进行尝试时,它可以正常工作:

>>> import fractions
>>> str(fractions.Fraction(0.5))
'1/2'

但是当我尝试使用0.550.1时,它显示的分子和分母都很高,而不是11/201/10

>>> str(fractions.Fraction(0.1))
'3602879701896397/36028797018963968'
>>> str(fractions.Fraction(0.55))
'2476979795053773/4503599627370496'

我该怎么做才能确保脚本始终显示最简化的分数?是否可以使用Fractions模块或其他模块来完成此操作,或者我必须自己编写该函数?

4 个答案:

答案 0 :(得分:2)

尝试一下:

fractions.Fraction(0.1).limit_denominator()

查看结果:

In [77]: str(fractions.Fraction(0.55).limit_denominator())
Out[77]: '11/20'

In [78]: str(fractions.Fraction(0.1).limit_denominator())
Out[78]: '1/10'

答案 1 :(得分:2)

传递0.55时,您传递的是浮点数,因此在Fraction接收值之前,它已经是不精确的表示形式。

或者,如果您传递字符串,则可以获得所需的确切值:

>>> fractions.Fraction('0.55')
Fraction(11, 20)

答案 2 :(得分:0)

尝试使用docs中的decimal模块示例:

>>> from fractions import Fraction
>>> from decimal import Decimal
>>> Fraction(Decimal('0.55'))
>>> Fraction(11, 20)
>>> str(Fraction(11, 20))
>>> '11/20'

答案 3 :(得分:0)

将其作为字符串传递以获得简化的分数:

>>> fractions.Fraction('0.1')
Fraction(1, 10)
>>> str(fractions.Fraction('0.1'))
'1/10'