0

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

4

3 回答 3

1

如果两边/都是int,结果也会是 - 至少在 Python 2.x 中。因此,您对整数值的测试将始终为真。

您可以将一侧或另一侧转换为float,它将给出浮点结果:

if (float(xmax - x0)/h) % 1 == 0:

您还可以从 Python 3 导入始终从除法返回浮点结果的行为:

from __future__ import division
于 2013-05-16T04:49:14.633 回答
0

这很简单...

if isinstance(var, int):
    pass
else:
    fail
于 2013-05-16T04:44:41.810 回答
0

要确定浮点数是否具有整数值,您可以调用.is_integer() method

>>> 2.0 .is_integer()
True
>>> 2.5 .is_integer()
False

如果xmax, x0, hint实例然后测试是否可以被ie(xmax - x0)整除的结果是否为整数:htruediv(xmax - x0, h)

if (xmax - x0) % h == 0:
    pass

对于浮点值,使用math.fmod(x, y)而不是x % y避免令人惊讶的结果

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可能是必要的。

于 2013-05-16T11:31:50.187 回答