gpt4 book ai didi

python - 为什么我的范围函数打印未截断的 float ?

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:23 24 4
gpt4 key购买 nike

我制作了这个范围函数,这样我就可以得到除整数步长之外的其他东西,而且它可以工作,但我想知道为什么 float 没有被截断。

def drange(start, step):
values = []
r = start
while r >= 0:
values.append(r)
r += step
return values


print drange(2, -0.2)

调试后我发现不是打印

[2, 1.8, 1.6, 1.4, 1.2, 1.0, 0.8, 0.6, 0.4, 0.2, 0]

它改为打印

[2, 1.8, 1.6, 1.4000000000000001, 1.2000000000000002, 1.0000000000000002, 0.8000
000000000003, 0.6000000000000003, 0.4000000000000003, 0.2000000000000003, 2.7755
575615628914e-16]

大声笑,难怪我的模块不工作了。为什么会发生这种情况,我该如何解决?

最佳答案

这是正确的行为,因为无法以 2 为基数表示 0.2 = 1/5,就像无法以 10 为基数表示 1/3 一样。

使用decimal相反,如果你想以 10 为基数进行计算。

此外,你真的应该使用生成器,如

def drange(start, step):
r = start
while r >= 0:
yield r
r += step
print list(drange(2, -0.2))

这允许 drange 的用户在不为整个列表分配内存的情况下迭代这些值。

关于python - 为什么我的范围函数打印未截断的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11375998/

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