我是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.有人可以告诉我为什么会这样吗?谢谢!
答案 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))