获取最简化的分数[复制]

问题描述 投票:1回答:4

这个问题已经在这里有一个答案:

我正在写一个使用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模块或其他模块做,或者我写的函数自己?

python python-3.x fractions
4个回答
3
投票

当你经过0.55要传递在浮子,所以它的Fraction接收值之前已经是一种不精确的表示。

另外,如果你传递一个字符串,而不是,你可以得到你想要的确切值:

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

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'

0
投票

尝试从decimal docs模块例如:

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

0
投票

把它作为字符串得到简化部分:

>>> fractions.Fraction('0.1')
Fraction(1, 10)
>>> str(fractions.Fraction('0.1'))
'1/10'
© www.soinside.com 2019 - 2024. All rights reserved.