Python中的小数位

越南hp291

我试图将所有小数位1/n放入Python列表中。

def dec(n):

    result = float(1) / n
    while (result >= 1):
        result = result - 1

    while (result != 0):
        result = result * 10
        decimals = int(result)
        yield(decimals)
        result = result - decimals

但是,当我尝试使用时list(dec(3)),它不会给我完整的3列表,而是类似[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 7, 2]

我该如何解决?

用户名

由于Python浮点数以二进制表示,因此分数的浮点数表示不仅不精确-小数近似值通常也一样不精确-而是以反直觉的方式不精确。我们习惯将1/3之类的分数近似为0.3333333333或33333333333/10 ** 10(假设10个有效数字)。但是,Python使用的二进制浮点数将数字表示为具有2的幂的分母的分数。在此表示形式中,1/3近似为6004799503160661/2 ** 54,并且输出中的数字均来自该分数。

要计算分数1/3十进制近似数字,请导入decimal模块并替换float(1)decimal.Decimal(1)设计Decimal类型的明确目标是支持您在此处尝试做的事情,即使用学校教授的算法获得与铅笔和纸计算相同的结果。

Decimal实例当然将包含有限数量的数字,这些数字将无限重复地重复1/3。为了能够不受限制地访问数字,请导入fractions并使用fractions.Fraction()在这种情况下,生成器产生的序列将是无限的,您将无法将其转换为列表,但是您仍然可以对其进行迭代并根据需要对其进行尽可能多的分析。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章