我正在使用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
有人可以帮助我吗?
答案 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