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

7013145

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.01 为增量生成 0 到 100 之间的数字,同时确保整数是整数。所以

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

cs95

你永远不应该依赖浮点整数的字符串表示,因为它们很少有精确的表示(近似导致精度不准确,这会导致工作中的扳手)。

你不需要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用来检查浮点数是否为整数。


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
...

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将'0'...'n'转换为'0''1'至'n'

如何将0/1转换为有效签名?

将条件转换为数字 0 1

将数组转换为0和1

将文本“ 0”转换为数字0时出错

在R中将(0,1,0,0,1,1,1)转换为(0,0,0,1,0,1,2)

如何在模型获取时将1转换为true或0转换为false

使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

将uint8转换为0-1浮点数的最有效方法

字符串索引-为什么S [0] [0]有效而S [1] [1]失败?

当我运行我的代码时,它会执行 0 0 0 0 0 0 0 0 0?

尝试将byteArray写入文件时,它将转换为0B png文件,无法获取有效文件

将varchar值'0%'转换为数据类型int时转换失败

将carchar值'{0}'转换为数据类型int时转换失败

将 5 个带有 1 和 0 的单元格转换为单个数组,如 Excel 中的 {1,0,0,1,1}

在Excel或SPSS中将Yes / No转换为1/0的有效方法

将(1,1,1)和(0,0,0)以外的BGR通道转换为白色(255,255,255)

MNIST Tensorflow:如何将形式[i]的张量转换为形式[... 0,0,0,1,0,0 ...]的张量,其中1在第i个位置?

如何使0自动转换为枚举?(| =有效,但不=)

将逻辑真/假转换为数字1/0?

根据阈值将NumPy数组转换为0或1

将数据帧转换为 1 和 0

将类别变量列表转换为(0,1)列表

Swift 4-将1或0从mysql转换为bool

将向量差转换为0到1之间

地幔自动将0和1转换为BOOL?

如何将数组转换为0或1个元素?

将0和1的字符串转换为字节

将int转换为0-1 float