我试图将所有小数位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] 删除。
我来说两句