我是这样做的:
1
2
3
4
5
6inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
print"this number is an int"
else:
print"this number is a float"
像那样。有没有更好的方法?
>5.0 = int(5.0)威胁
《冰上的两个搜索引擎的把戏,所以所有的其他问题,这是时代的要求。每个这些将提供一个重复的相同的标准答案。
…………………和你为什么需要知道?
相关:如何检查,如果一个float值是一个整数。
极移fails":它对larger数。
assert isinstance(inNumber, (int, float)),"inNumber is neither int nor float, it is %s" % type(inNumber)是我在寻找的时候发现了这个问题与谷歌。
"问题是不特别好卖。冰上的要求:1)"什么是对Python的变量类型的变量somenumber吗?"(2)冰somenumber全号码吗?3)的冰,冰somenumber字符串代表一个已知两个数,但冰的。它代表的整数或浮点数的价值?一些用例的计数器会出来一suitable知道服务解决方案。
使用IsTrime.
1
2
3
4
5
6>>> x = 12
>>> isinstance(x, int)
True
>>> y = 12.0
>>> isinstance(y, float)
True
所以:
1
2
3
4>>> if isinstance(x, int):
print 'x is a int!'
x is a int!
编辑:
如前所述,在长整数的情况下,上述方法不起作用。所以你需要做的是:
1
2
3
4
5
6>>> x = 12L
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x, int)
False
issubclass不是更通用吗?
@大卫:issubclass是一个错误,因为它在类上工作。isinstance检查给定对象是类的实例还是该类的子类之一,因此它是完全通用的。我认为isinstance(obj, cls)相当于issubclass(obj.__class__, cls)。
这不适用于其他整数类型,例如,如果x = 12L。我知道只有int被要求,但最好在其他问题发生之前解决它们。最通用的可能是isinstance(x, numbers.Integral)。
@Delnan谢谢,我不知道IsInstance检查了子类。考虑到这一点,很明显,现在做其他事情毫无意义。如果要检查到类标识,则可以编写type(obj) is cls。
@史考特:我不知道numbers的事,请随时更新这个问题,以防有人最终在这里寻找它。
@Scott都是numbers.Integral的python子类中的内置整型?
@大卫:assert isinstance(1, numbers.Integral) and isinstance(1L, numbers.Integral)(在python 3中,这是没有意义的,因为long被删除,int总是任意精度)。
@DavidHeffernan:numbers.Integral是一个抽象的基类,它允许任何人编写承诺表现为整数的类。任何内置类型当然都可以工作,但结果可能是混合的,否则,例如numpy.int16不是Integral。
对于python 2,还有直接的双重检查:isinstance(x, (int, long))。
警告:bools也是整数的实例。见isinstance(True, int)。
我最喜欢@ninjagecko的回答。
这也会起作用:
for Python 2.x
1isinstance(n, (int, long, float))
Python 3.x doesn't have long
1isinstance(n, (int, float))
复数也有复数类型
一班轮:
1isinstance(yourNumber, numbers.Real)
这样可以避免一些问题:
1
2>>> isinstance(99**10,int)
False
演示:
1
2
3
4
5
6
7
8
9
10
11
12>>> import numbers
>>> someInt = 10
>>> someLongInt = 100000L
>>> someFloat = 0.5
>>> isinstance(someInt, numbers.Real)
True
>>> isinstance(someLongInt, numbers.Real)
True
>>> isinstance(someFloat, numbers.Real)
True
在python 3中,isinstance(99**10,int)是True。
请求宽恕比请求许可更容易。只需执行操作即可。如果它起作用,物体是可接受的、合适的、合适的类型。如果操作不起作用,则对象的类型不合适。了解这种类型很少有帮助。
只需尝试操作并查看它是否工作。
1
2
3
4
5
6
7
8
9
10
11inNumber = somenumber
try:
inNumberint = int(inNumber)
print"this number is an int"
except ValueError:
pass
try:
inNumberfloat = float(inNumber)
print"this number is a float"
except ValueError:
pass
当type和isinstance可以完成这项工作时,有什么理由这样做吗?
int(1.5)不会产生valueerror,您显然知道——故意给出错误的答案?真的吗?
@格伦:我假设S.Lott把这个问题理解为"检查字符串是int还是float"(在这种情况下,它实际上是一个很好的解决方案)。
@A A:class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int。(抱歉,语法错误,但我不能在一行上做更多的操作。)
答:是的。原因是这样更简单、更可靠。int和float之间的区别甚至可能与许多算法都不相关。显式地请求类型通常是不好的多态性或更严重的设计问题的标志。简而言之。不要检查类型。请求宽恕比请求许可更容易。
import math; print math.isnan('hi')对我来说是失败的,因为isnan预计会有int或float。我想把它包起来,这样_isnan('hi')就可以把False还给我了。我想让_isnan(float('nan'))返回True,但_isnan('nan')返回False。原因有点复杂——这与向自定义Web服务发送类似JSON的输入有关,我们希望区分?x="nan"和?x=nan(当在URL中提供时)。现在,我相信你的方法会以同样的方式对待'nan'和float('nan')。这不是我想要的。是鸭子的类型还是数学的问题。是吗?
这是Python的方式。
我将把这两个块反过来,从float开始,然后是int。否则,'3'将被视为一个浮点数,而实际上它是一个int。
你也可以用OCx1〔0〕来做例子:
1
2if type(inNumber) == int : print"This number is an int"
elif type(inNumber) == float : print"This number is a float"
这在[公认的罕见]的情况下会失败,因为所讨论的数字是int或float的子类。(因此,在我看来,为什么"存在"会被认为是"更好的")。
您可以使用模来确定x是否是数字整数。isinstance(x, int)方法仅确定x是否是按类型的整数:
1
2
3
4
5def isInt(x):
if x%1 == 0:
print"X is an integer"
else:
print"X is not an integer"
3.2 % 2生成1.4。威利,你在说什么?另外,如果x不是一个开始的数字,您将得到一个TypeError,因此如果您遵循这个建议,您的程序将提前退出…
@然后,可以使用isInstance()方法确定x是否是数字。此外,3.2%1的收益率为0.2。如果一个数能被1整除,它就是一个数字整数。这个方法对我很有用,尽管它可能不适合你。
这是正确的;x%1 == 0只对int为真(但对于小数点后只有零的浮点也为真)。如果你知道它将是一个int(例如,如果这是一个函数的参数),那么你可以用modulo检查一下。我敢打赌这比Math.floor(x) == x快。在不太乐观的方面,如果你通过一个像1.0或5.0那样的漂浮物,这将是True,你会遇到同样的问题,使用他/她的问题中提到的原始海报。
这简单地解决了我的问题,谢谢!
这里有一段代码检查一个数字是否是整数,它适用于python 2和python 3。
1
2
3
4
5
6
7
8
9import sys
if sys.version < '3':
integer_types = (int, long,)
else:
integer_types = (int,)
isinstance(yourNumber, integer_types) # returns True if it's an integer
isinstance(yourNumber, float) # returns True if it's a float
注意,python 2有两种类型:int和long,而python 3只有int类型。来源。
如果您想检查您的号码是否是代表int的float,请执行此操作
1(isinstance(yourNumber, float) and (yourNumber).is_integer()) # True for 3.0
如果你不需要区分int和float,并且两者都可以,那么Ninjagecko的答案就是要走的路。
1
2
3import numbers
isinstance(yourNumber, numbers.Real)
我知道这是一条旧线,但这是我正在使用的东西,我想它可能会有所帮助。
它在python 2.7和python 3中工作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19def is_float(num):
"""
Checks whether a number is float or integer
Args:
num(float or int): The number to check
Returns:
True if the number is float
"""
return not (float(num)).is_integer()
class TestIsFloat(unittest.TestCase):
def test_float(self):
self.assertTrue(is_float(2.2))
def test_int(self):
self.assertFalse(is_float(2))
这个解决方案怎么样?
1
2
3
4if type(x) in (float, int):
# do whatever
else:
# do whatever
请检查:导入编号
1
2
3
4
5
6
7
8
9
10
11import math
a = 1.1 - 0.1
print a
print isinstance(a, numbers.Integral)
print math.floor( a )
if (math.floor( a ) == a):
print"It is an integer number"
else:
print False
虽然x是浮点数,但值是整数,因此如果要检查值是整数,则不能使用isInstance,需要比较值而不是类型。
这就是我需要的,谢谢
在python版本3.6.3 shell中尝试过
1
2
3
4
5
6>>> x = 12
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x,int)
True
找不到任何工作。
试试这个…
1
2
3
4def is_int(x):
absolute = abs(x)
rounded = round(absolute)
return absolute - rounded == 0
1
2
3
4
5
6
7
8
9
10def is_int(x):
absolute = abs(x)
rounded = round(absolute)
if absolute - rounded == 0:
print str(x) +" is an integer"
else:
print str(x) +" is not an integer"
is_int(7.0) # will print 7.0 is an integer
func检查int,但对于.0的float也返回true。
请解释为什么/如何解决运营问题。
@heri他想检查一个数字是int还是float,我定义的函数可以做到这一点,abs是一个内置的python func,它返回数字的绝对值,round也是一个内置的func,它对数字进行四舍五入,如果我从绝对值中减去四舍五入的数字,得到一个零,那么这个数字是一个int,或者它有一个ze。在小数点后
variable.isnumeric检查值是否为整数:
1
2
3
4if myVariable.isnumeric:
print('this varibale is numeric')
else:
print('not numeric')