gpt4 book ai didi

python - 代码在将 0.0 转换为 0 时有效,但在 1.0 转换时失败?

转载 作者:行者123 更新时间:2023-12-01 02:39:11 26 4
gpt4 key购买 nike

Python,版本 3.5

我有以下代码:

def drange(start, stop, step):
r = start
while r < stop:
yield r
r += step

def my_func():
whole_nums = [float(num) for num in range(0, 100)]
for x in drange(0.0, 100.01, 0.01):
if str(x).split('.')[1] == '0':
x = str(x).split('.')[0]
else:
x = round(x, 2)
print(str(x))
time.sleep(0.2)

drange 函数以给定的增量循环遍历给定的数字并生成数字。问题是我想要 0、1、2、3 等,但它会产生 0.0、1.0 等。

我想,既然我知道这些错误数字的格式(中间的所有其他数字,如 0.01,一直到我想要的 99.99),我可以这样做:

str(theNumber).split('.')[1]

(如 my_func 中所示),如果输出是 '0' 那么我就会知道我有 0.0、1.0 等,并且可以获取我想要的输出str(theNumber).split('.')[0] 当然,将其转换为 int 或其他类型。

但是!当我执行 my_func 时,.split() 解决方案仅适用于 0.0,当它达到 1.0 时,它只会跳过 if 语句并继续进入 else,打印出 1.0 而不是 1。

代码应该可以正常运行,无需导入任何内容,因此请随意尝试一下。

更新

好吧,看来我的方法从根本上来说是有缺陷的(参见@danils 答案),所以我现在的问题是:如何生成从 0 到 100 的数字,增量为 0.01,同时确保整数是整数。所以

0、0.01、...、1、1.01、1.1、1.02、... 99.5、99.51、...、100

最佳答案

您永远不应该依赖浮点整数的字符串表示形式,因为它们很少有精确的表示形式(近似值会导致精度不准确,从而导致工作中出现问题)。

您不需要 str(x)print,因为 print 会自动为您完成此操作。

此外,您的 drange 函数在生成步骤中的下一个值时似乎引入了浮点不准确。您可以使用 np.arange 作为范围,它支持小数步长:

import numpy as np
out = np.arange(0.0, 100.01, 0.01)
print(out)

array([ 0.00000000e+00, 1.00000000e-02, 2.00000000e-02, ...,
9.99800000e+01, 9.99900000e+01, 1.00000000e+02])

注意:如果您没有 numpy,可以使用 pip install numpy 安装它。

最后,您可以使用 float.is_integer 来检查 float 是否为整数。

<小时/>
for x in np.arange(0.0, 100.01, 0.01):
if x.is_integer():
x = int(x)
else:
x = round(x, 2)

print(x)

这给你:

0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
...

关于python - 代码在将 0.0 转换为 0 时有效,但在 1.0 转换时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903142/

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