我在确定变量是否为整数时遇到问题。不是变量类型,而是存储在变量中的实际值。我尝试使用variable % 1
作为测试,但它似乎不起作用。这是我用于测试的代码:
if ((xmax - x0)/h) % 1 == 0:
pass
elif ((xmax - x0)/h) % 1 != 0:
print "fail"
无论xmax,x0和h的值是什么,语句总是通过。例如,如果它们是2.5(2.5%1 = .5),它仍然会通过。我试过if / else所以我尝试了另一个if语句,如上所述,它也不起作用。
答案 0 :(得分:1)
如果/
的两边都是int
,结果也是如此 - 至少在Python 2.x中。因此,对整数值的测试将始终为真。
您可以将一方或另一方转换为float
,它会产生浮点结果:
if (float(xmax - x0)/h) % 1 == 0:
您还可以从Python 3导入始终从分部返回浮点结果的行为:
from __future__ import division
答案 1 :(得分:0)
简单......
if isinstance(var, int):
pass
else:
fail
答案 2 :(得分:0)
要查明浮点数是否具有整数值,您可以调用.is_integer() method
:
>>> 2.0 .is_integer()
True
>>> 2.5 .is_integer()
False
如果xmax, x0, h
是int
个实例,那么要测试(xmax - x0)
是否可以被h
整除,即truediv(xmax - x0, h)
的结果是否为整数:
if (xmax - x0) % h == 0:
pass
对于浮点值,请使用math.fmod(x, y)
instead of x % y
to avoid suprising results:
from math import fmod
if fmod(xmax - x0, h) == 0:
pass
在大多数情况下,您可能希望与某些容差进行比较:
eps = 1e-12 * h
f = fmod(xmax - x0, h)
if abs(f) < eps or abs(f - h) < eps:
pass
fmod
的结果本身是准确的,但参数可能不是eps
可能是必要的。