检查数字是int还是float

Ste*_*son 178 python

我是这样做的:

inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
    print "this number is an int"
else:
    print "this number is a float"
Run Code Online (Sandbox Code Playgroud)

这样的事情.
有没有更好看的方法来做到这一点?

use*_*312 253

使用isinstance.

>>> x = 12
>>> isinstance(x, int)
True
>>> y = 12.0
>>> isinstance(y, float)
True
Run Code Online (Sandbox Code Playgroud)

所以:

>>> if isinstance(x, int):
        print 'x is a int!'

x is a int!
Run Code Online (Sandbox Code Playgroud)

_编辑:_

正如所指出的,在长整数的情况下,上述情况不起作用.所以你需要这样做:

>>> x = 12L
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x, int)
False
Run Code Online (Sandbox Code Playgroud)

  • 对于Python 2,还有直接的双重检查:`isinstance(x,(int,long))`. (9认同)
  • 这不适用于其他整数类型,例如,如果`x = 12L`.我知道只有`int`被要求,但是在它们发生之前解决其他问题是很好的.最通用的可能是`isinstance(x,numbers.Integral)`. (7认同)
  • 最后一段是不是错了?`isinstance(12, float)` 对我来说返回 `False`。 (4认同)
  • 警告: bool 也是整数的实例。见`isinstance(True, int)` (3认同)
  • @David:`issubclass`会出错,因为它适用于类.`isinstance`检查给定对象是否是类*的实例或该类的子类之一*,因此它是完全通用的."isinstance(obj,cls)"的方法相当于`issubclass(obj .__ class__,cls)` (2认同)

Dan*_*n H 80

我最喜欢@ninjagecko的回答.

这也有效:

对于Python 2.x

isinstance(n, (int, long, float)) 
Run Code Online (Sandbox Code Playgroud)

Python 3.x没有多久

isinstance(n, (int, float))
Run Code Online (Sandbox Code Playgroud)

对于复数,也有类型复合

  • 救生员..我没有注意到`isinstance()`可以检查多种类型.. (4认同)
  • 旁注,因为布尔值将解析为 True(例如 `isinstance(False, (int, float)) = True`),所以我需要 `not isinstance(n, bool) 和 isinstance(n, (int, float))` (2认同)

nin*_*cko 50

一内胆:

isinstance(yourNumber, numbers.Real)
Run Code Online (Sandbox Code Playgroud)

这避免了一些问题:

>>> isinstance(99**10,int)
False
Run Code Online (Sandbox Code Playgroud)

演示:

>>> import numbers

>>> someInt = 10
>>> someLongInt = 100000L
>>> someFloat = 0.5

>>> isinstance(someInt, numbers.Real)
True
>>> isinstance(someLongInt, numbers.Real)
True
>>> isinstance(someFloat, numbers.Real)
True
Run Code Online (Sandbox Code Playgroud)

  • 在Python 3中,isinstance(99**10,int)`是'True`. (5认同)
  • 这也传递了“Bool”。`实例(True,数字.Real)`是`True` (2认同)

S.L*_*ott 13

请求宽恕比要求许可更容易.只需执行操作即可.如果它起作用,则该物体是可接受的,合适的,合适的类型.如果操作不起作用,则该对象不是合适的类型.知道类型很少有帮助.

只需尝试操作,看看它是否有效.

inNumber = 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
Run Code Online (Sandbox Code Playgroud)

  • int(1.5)不会引发ValueError,你显然知道 - 故意给出错误的答案?真的吗? (7认同)
  • 当`type`和`isinstance`可以完成这项工作时,有没有理由这样做? (5认同)
  • @Glenn:我认为S.Lott将这个问题理解为"检查**字符串**是否为int或float"(在这种情况下,它实际上是一个很好的解决方案). (3认同)
  • @AA:是的.原因是这更简单,更可靠."int"和"float"之间的区别甚至可能与许多算法无关.明确地请求类型通常是不良多态或更严重的设计问题的标志.简而言之.不要检查类型.要求宽恕比要求许可更容易. (2认同)

use*_*595 8

您还可以使用type() 示例:

if type(inNumber) == int : print "This number is an int"
elif type(inNumber) == float : print "This number is a float"
Run Code Online (Sandbox Code Playgroud)

  • 在 [不可否认] 有问题的数字是 int 或 float 的子类的情况下,这将失败。(因此,为什么“isinstance”会被认为“更好”,IMO。) (6认同)

小智 8

在 Python 3.6.3 Shell 中试过

>>> x = 12
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x,int)
True
Run Code Online (Sandbox Code Playgroud)

想不出有什么工作。


Kri*_*ern 7

我不确定为什么以前没有提出过这一点,但是在名为 的浮点数上使用内置的 Python 方法怎么样is_integer()?基本上你可以给它一些转换为浮点数的数字,并询问它是否是整数。例如:

>>> (-13.0).is_integer()
True

>>> (3.14).is_integer()
False
Run Code Online (Sandbox Code Playgroud)

然而,为了完整起见,请考虑:

isinstance(i, int) or i.is_integer()
Run Code Online (Sandbox Code Playgroud)


kra*_*owi 6

这个解决方案怎么样?

if type(x) in (float, int):
    # do whatever
else:
    # do whatever
Run Code Online (Sandbox Code Playgroud)


M.H*_*fny 5

请检查:导入号码

import 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
Run Code Online (Sandbox Code Playgroud)

虽然 X 是浮点型,但值是整数,因此如果要检查值是整数,则不能使用 isinstance,而需要比较值而不是类型。


Ago*_*ino 5

这是一段代码,用于检查数字是否为整数,适用于Python 2和Python 3.

import 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
Run Code Online (Sandbox Code Playgroud)

注意,Python 2中具有两种类型的intlong,而Python 3具有唯一类型int.来源.

如果要检查您的号码是否float代表a int,请执行此操作

(isinstance(yourNumber, float) and (yourNumber).is_integer())  # True for 3.0
Run Code Online (Sandbox Code Playgroud)

如果您不需要区分int和float,并且两者都可以,那么ninjagecko的答案是要走的路

import numbers

isinstance(yourNumber, numbers.Real)
Run Code Online (Sandbox Code Playgroud)


Wil*_*cke 5

您可以使用模来确定x是否为整数。该isinstance(x, int)方法仅通过类型确定x是否为整数:

def isInt(x):
    if x%1 == 0:
        print "X is an integer"
    else:
        print "X is not an integer"
Run Code Online (Sandbox Code Playgroud)


Sha*_*har 5

我知道这是一个旧线程,但这是我正在使用的东西,我认为可能会有所帮助。

它适用于python 2.7和python 3 <。

def 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))
Run Code Online (Sandbox Code Playgroud)


Alw*_*nda 5

你可以用简单的 if 语句来做到这一点

检查浮动

如果类型(a)==类型(1.1)

检查整数类型

如果类型(a)==类型(1)