숫자가 int인지 float인지 확인하십시오.


199

내가 한 방법은 다음과 같습니다.

inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
    print "this number is an int"
else:
    print "this number is a float"

그런 것.
더 좋은 방법이 있습니까?


4
요령은이 질문이 제기 된 다른 모든 시간을 SO에서 검색하는 것입니다. 이들 각각은 동일한 표준 답변의 반복을 제공합니다.
S.Lott

1
... 왜 알아야합니까?
Karl Knechtel


@ Woooo : 더 큰 숫자는 실패 합니다 .
jfs

assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)Google에서이 질문을 찾았을 때 찾고 있던 것이 었습니다.
Martin Thoma

답변:


283

isinstance를 사용하십시오 .

>>> x = 12
>>> isinstance(x, int)
True
>>> y = 12.0
>>> isinstance(y, float)
True

그래서:

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

x is a int!

_편집하다:_

지적한 바와 같이, 긴 정수의 경우 위의 작동하지 않습니다. 따라서 다음을 수행해야합니다.

>>> x = 12L
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x, int)
False

없는 것 issubclass보다 일반적인 일?
David Heffernan

3
@David : issubclass클래스에서 작동하므로 오류가 발생합니다. isinstance주어진 객체가 클래스의 인스턴스 인지 또는 해당 클래스의 서브 클래스 중 하나인지 확인 하므로 완벽하게 일반적입니다. 다음 isinstance(obj, cls)과 같은 issubclass(obj.__class__, cls)

7
다른 정수 유형 (예 : if)에서는 작동하지 않습니다 x = 12L. int요청 만 받았지만 다른 문제가 발생하기 전에 해결하는 것이 좋습니다. 아마 가장 일반적인 것입니다 isinstance(x, numbers.Integral).
Scott Griffiths

9
Python 2의 경우 직접 이중 검사도 있습니다 isinstance(x, (int, long)).
Eric O Lebigot

1
경고 : bool은 정수의 인스턴스이기도합니다. 참조isinstance(True, int)
jtschoonhoven

93

@ninjagecko의 답변이 가장 좋습니다.

이것은 또한 작동합니다 :

Python 2.x 용

isinstance(n, (int, long, float)) 

파이썬 3.x는 오래 가지 않습니다

isinstance(n, (int, float))

복소수에 대한 복소수 유형도 있습니다


논리 값이 True (예를 해결할 수 있기 때문에 (!) 참고는 isinstance(False, (int, float)) = True) 내가 필요로 not isinstance(n, bool) and isinstance(n, (int, float))하는 대신
YTZ

54

짧막 한 농담:

isinstance(yourNumber, numbers.Real)

이것은 몇 가지 문제를 피합니다.

>>> isinstance(99**10,int)
False

데모:

>>> import numbers

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

>>> isinstance(someInt, numbers.Real)
True
>>> isinstance(someLongInt, numbers.Real)
True
>>> isinstance(someFloat, numbers.Real)
True

6
파이썬 3에서는 isinstance(99**10,int)입니다 True.
Carlos A. Gómez

12

허락을 구하는 것보다 용서를 구하는 것이 더 쉽습니다. 간단히 작업을 수행하십시오. 그것이 작동한다면, 물체는 수용 가능하고 적합하며 적절한 유형이었습니다. 작업이 작동하지 않으면 개체 유형이 적합하지 않은 것입니다. 유형을 아는 것은 거의 도움이되지 않습니다.

작업을 시도하고 작동하는지 확인하십시오.

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

5
언제 type, 그리고 일을 isinstance할 수 있는 이유가 있습니까?
user225312

9
int (1.5)는 ValueError를 발생시키지 않으며, 의도적으로 틀린 답을주는 것을 알고 있습니까? 진심이야?
Glenn Maynard

4
@ Glenn : S.Lott가 질문을 " 문자열 이 int 또는 float인지 확인"(이 경우 실제로 좋은 해결 책임)으로 이해했다고 가정 합니다.

@AA : class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int. (나쁜 구문에 대해 죄송하지만 한 줄에 더 이상 할 수 없습니다.)
mg.

2
@AA : 그렇습니다. 그 이유는 이것이 더 간단하고 안정적이기 때문입니다. 많은 알고리즘 int과 의 구별은 float심지어 많은 알고리즘과 관련이 없을 수도 있습니다. 유형을 명시 적으로 요청하는 것은 일반적으로 다형성이 나쁘거나 더 심각한 설계 문제의 징후입니다. 한마디로. 유형을 확인하지 마십시오. 허락을 구하는 것보다 용서를 구하는 것이 더 쉽습니다.
S.Lott

10

당신이 할 수있는 일은 type() 예제를 사용하는 것입니다 .

if type(inNumber) == int : print "This number is an int"
elif type(inNumber) == float : print "This number is a float"

1
문제의 숫자가 int 또는 float의 서브 클래스 인 경우는 드물게 실패합니다. (따라서 "isinstance"가 "더 나은"것으로 간주되는 이유, IMO.)
Dan H

7

다음은 숫자가 정수인지 여부를 확인하는 코드이며 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

공지 사항 파이썬 2는 두 가지 유형을 가지고 intlong파이썬 3 만 입력 반면, int. 소스 .

숫자 float가을 나타내는 숫자인지 확인하려면 다음을 int수행하십시오.

(isinstance(yourNumber, float) and (yourNumber).is_integer())  # True for 3.0

int와 float을 구분할 필요가없고 어느 쪽이든 괜찮다면 ninjagecko의 대답은 갈 길입니다.

import numbers

isinstance(yourNumber, numbers.Real)

6

이 솔루션은 어떻습니까?

if type(x) in (float, int):
    # do whatever
else:
    # do whatever

6

나는 그것이 오래된 실이라는 것을 알고 있지만 이것은 내가 사용하고있는 것으로 도움이 될 것이라고 생각했습니다.

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))

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"

3.2 % 2수율 1.4. Whatchu talkin ''bout, Willi (s | am)? 또한 TypeErrorx가 시작하기위한 숫자가 아닌 경우에는 다음과 같은 조언을 따르면 프로그램이 조기에 종료됩니다.
dylnmc

@dylnmc 그런 다음 isinstance () 메서드를 사용하여 x가 숫자인지 확인할 수 있습니다. 또한, 3.2 % 1은 0.2를 산출합니다. 숫자를 1로 균등하게 나눌 수 있으면 숫자로 된 정수입니다. 이 방법은 당신에게 적합하지 않더라도 나에게 유용했습니다.
William Gerecke

이것은 사실이다; x%1 == 0int의 경우에만 true이어야하지만 소수점 다음에 0이있는 float의 경우에도 마찬가지입니다. 그것이 int가 될 것임을 알고 있다면 (예를 들어 이것이 함수의 매개 변수 인 경우) 모듈로로 확인할 수 있습니다. 나는 그것보다 빠르다 Math.floor(x) == x. 그렇게 밝지 않은 측면에서 이것은 or 과 True같은 float를 전달 하면 원래 포스터가 자신의 질문에 언급 한 것과 동일한 문제가 발생합니다. 1.05.0
dylnmc

5

파이썬 버전 3.6.3 셸에서 시도

>>> x = 12
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x,int)
True

작업 할 항목을 찾을 수 없습니다.


4

pls는 이것을 확인하십시오 : 수입품 번호

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

X는 부동이지만 값은 정수이지만 값이 정수인지 확인하려면 isinstance를 사용할 수 없으며 유형이 아닌 값을 비교해야합니다.



0

업데이트 : 이것을 시도하십시오


inNumber = [32, 12.5, 'e', 82, 52, 92, '1224.5', '12,53',
            10000.000, '10,000459', 
           'This is a sentance, with comma number 1 and dot.', '121.124']

try:

    def find_float(num):
        num = num.split('.')
        if num[-1] is not None and num[-1].isdigit():
            return True
        else:
            return False

    for i in inNumber:
        i = str(i).replace(',', '.')
        if '.' in i and find_float(i):
            print('This is float', i)
        elif i.isnumeric():
            print('This is an integer', i)
        else:
            print('This is not a number ?', i)

except Exception as err:
    print(err)

예,했는데 작동하지 않았습니다. 그리고 당신이 실제로 시도하지 않았다고 확신합니다. 작동하지 않기 때문입니다.
JJJ

확실히, 덜 불쾌한 대응 방법이 있습니다. 당신이 옳지 만 더 많은 테스트를 실행하지만 모든 경우에 작동하지는 않습니다.
Magotte 2018 년

@JJJ이 솔루션은 어떻습니까?
Magotte 2018 년

0

간단한 if 문으로 할 수 있습니다

플로트를 확인하려면

type (a) == type (1.1) 인 경우

정수 유형을 확인하려면

type (a) == type (1) 인 경우


-1
def 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.0입니다 수레 true를 반환
기드온 Lytes

귀하의 기여가 OP 문제를 해결하는 이유 / 어떻게 설명하십시오.
Heri

@Heri 그는 숫자가 int 또는 float인지 확인하려고합니다. 내가 정의 한 함수는 abs가 숫자의 절대 값을 반환하는 내장 python func이며 round는 inbuilt func입니다. 숫자, 절대 숫자에서 반올림 된 숫자를 빼고 0을 얻는 경우 숫자는 정수이거나 소수점 이하 자릿수 다음과 같이 0이됩니다
Gideon Lytes

-1

이 시도...

def is_int(x):
  absolute = abs(x)
  rounded = round(absolute)
  return absolute - rounded == 0

-5

variable.isnumeric 값이 정수인지 확인합니다.

 if myVariable.isnumeric:
    print('this varibale is numeric')
 else:
    print('not numeric')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.