有没有办法在Python中获得分数的重复小数部分?

时间:2009-07-12 21:35:11

标签: python decimal precision

我正在使用Python的十进制模块处理分数,我想得到某个分数的重复部分。例如:如果我有1/3,我想得到3,如果我有1/7,我想得到142857.有没有任何标准功能可以做到这一点?

4 个答案:

答案 0 :(得分:11)

由于给出答案可能是项目euler的扰流器(这通常不会在stackoverflow处完成),我想提供这个提示:阅读this(第1.2节应响铃)。< / p>

答案 1 :(得分:1)

我知道这个问题是很久以前的事了,但我认为人们可能仍然会搜索这样的东西,所以我想我在做这些事情时要记住一些事情,因为我尝试编码并最终改变主意使用长分并找到重复发生的地方,当你在分成后得到一个余数。我实际上最初试图使用Ants Aasma建议的方法。

我试图获得这样的输出为1/7,因为我的函数试图输出一个字符串,可以用作问题的答案; “0.142857 142857 ......”

使用Ants Aasma提供的方法很容易找到1/7等小数,但是当你尝试1/35之类的东西时会很痛苦 - 这个数字不能分为9个数字。首先,任何分母都必须将10的因子分开 - 即将所有的5和2分开,将1/35的分数转换为0.2 / 7

对于像1/70这样的分数,我认为最好的方法是实际找到1/7然后在小数位后面加一个0。对于1/35,您将其转换为0.2 / 7,然后转换为2/7,重复部分和小数位之间为0。

如果使用Ants Aasma建议的方法,请记住几个提示。

答案 2 :(得分:0)

找到形式10 ** k - 1的第一个数字,它精确地除以分数的分母,除以分母并乘以分子,然后得到你的重复部分。

答案 3 :(得分:0)

在做类似的事情并寻找答案时,我发现了这个问题并找到了解决方案:)))

所以我想在这里发布我的解决方案:)

虽然可能很快,哈哈

def repeating_decimal(decimal):

    repeat_str = str(decimal)[str(decimal).find('.') + 1:-1]

    dec_list = list(repeat_str)[::-1]
    dec_set = set(repeat_str)

    for i in dec_set:

        while dec_list.count(i) > 1:
            dec_list.remove(i)

    return ''.join(dec_list[::-1])