Python 中的 np.ceil 在 for 循环中不起作用



我对python来说是很新的,我对np.ceil函数有问题。因此,当我做np.ceil(10/0.1)时,我会得到100,这就是我的期望。但是,当我以循环为单位时:

interval = np.arange(0.01,0.2,0.01)
for i in interval:
    print(np.ceil(10/i))

我获得了所有I值的正确结果,除了i = 0.1。为此,我得到101而不是100。有人可以告诉我为什么会发生这种情况?谢谢!

它与是否存在变量无关。值根本不一样:

In [9]: interval
Out[9]:
array([ 0.01,  0.02,  0.03,  0.04,  0.05,  0.06,  0.07,  0.08,  0.09,
        0.1 ,  0.11,  0.12,  0.13,  0.14,  0.15,  0.16,  0.17,  0.18,  0.19])
In [10]: x = interval[9]
In [11]: x
Out[11]: 0.099999999999999992
In [12]: i = 0.1
In [13]: x == i
Out[13]: False

注意,这两个数字都完全是0.1,因为该数字不能使用二进制浮点准确地表示。另请注意:

In [14]: type(x), type(i)
Out[14]: (numpy.float64, float)

虽然这不那么相关。

您可以通过舍入来强制另一个浮点表示。

这应该在您的特定情况下解决问题。

interval = np.arange(0.01,0.2,0.01)
for i in interval:
    if i == 0.1:
        print('this will miss')
    if i == interval[9]:
        print('this will hit')
    j = round(i, 3)
    print(np.ceil(10/i), np.ceil(10/j))

最新更新