得到最简单的分数

2024-04-20 08:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个使用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模块或其他模块来实现,或者我必须自己编写函数?你知道吗


Tags: 模块函数import程序脚本数字分子分数
3条回答

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

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

当您传递0.55时,您传递的是一个float,因此在Fraction收到值之前,它已经是一个不精确的表示。你知道吗

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

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

试试这个:

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'

相关问题 更多 >