确定变量在数值上是否是Python中的整数

时间:2013-05-16 04:34:08

标签: python variables integer modulo

我在确定变量是否为整数时遇到问题。不是变量类型,而是存储在变量中的实际值。我尝试使用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语句,如上所述,它也不起作用。

3 个答案:

答案 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, hint个实例,那么要测试(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可能是必要的。