分数不完整

时间:2013-12-29 00:46:12

标签: python fractions

我正在使用python的分数模块。

我正在尝试获得2 * .5的分数。问题是,当我使用Fraction命令时,它不会返回我想要的东西,因为,例如,在i = 2中,返回的分数是146666667/1000000000,但我希望它返回给我17/12 (第二个aproximation 2 * .5)。我怎么解决它?

代码是这样的:

ai=2
bi=1
n=5
for i in range(n):
  ai=2+float(bi)/ai
  F=fr.Fraction(str(ai-1))
  print F

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:6)

如果您要使用分数,请不要使用浮点数进行部分计算。您可以通过使ai成为分数来执行与分数相关的所有算术:

import fractions
ai = fractions.Fraction(2)
bi = 1
n = 5
for i in range(n):
    ai = 2 + bi / ai
    F = ai - 1
    print(F)

产量

3/2
7/5
17/12
41/29
99/70

答案 1 :(得分:1)

稍微搜索一下,我找到了这个函数limit_denominator(...),它可以帮到你:

F = fr.Fraction(str(ai - 1)).limit_denominator(100)

<强>输出:

3/2
7/5
17/12
41/29
99/70

Fraction docs中阅读更多内容。

答案 2 :(得分:1)

分数模块是一个很棒的实用程序。谢谢你把它带到这里。

要将分母控制为更合理的值,请尝试添加limit_denominator(),如下所示:

from fractions import Fraction
ai=2
bi=1
n=5
for i in range(n):
  ai=2+float(bi)/ai
  F=Fraction(str(ai-1)).limit_denominator(1000)
  print i, F

输出现在看起来像这样:

%run "testFractions.py"
0 3/2
1 7/5
2 17/12
3 41/29
4 99/70