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

时间:2017-11-30 18:06:35

标签: python

我是python的新手,我的np.ceil函数有问题。所以当我做np.ceil(10/0.1)时,我得到100,这就是我所期望的。但是,当我在for循环中执行时:

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

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

2 个答案:

答案 0 :(得分:1)

它与变量无关。这些值完全不一样:

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)

虽然,这并不相关。

答案 1 :(得分:0)

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

这应该可以解决您的具体情况。

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