gpt4 book ai didi

python - Python 中的小数位

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:22 25 4
gpt4 key购买 nike

我正在尝试将 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 float 以二进制表示,分数的 float 表示不仅不精确——十进制近似值通常同样不精确——而且以一种违反直觉的方式不精确。我们习惯于将 1/3 这样的分数近似为 0.3333333333 或 33333333333/10**10(假设 10 位有效数字)。但是,Python 使用的二进制 float 将数字表示为具有二次方分母的分数。在此表示中,1/3 近似为 6004799503160661/2**54,输出中的数字来自该分数。

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

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

关于python - Python 中的小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com