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