Проверьте, является ли число int или float

Вот как я это сделал:

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

Что-то в этом роде. Есть ли более красивые способы сделать это?

Ответ 1

Используйте 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!

_EDIT: _

Как уже отмечалось, в случае длинных целых чисел вышеуказанное не будет работать. Итак, вам нужно сделать:

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

Ответ 2

Мне нравится @ninjagecko ответить больше всего.

Это также будет работать:

для Python 2.x

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

Python 3.x не долго

isinstance(n, (int, float))

есть также комплекс типа для комплексных чисел

Ответ 3

Однострочник:

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

Ответ 4

Проще просить прощения, чем просить разрешения. Просто выполните операцию. Если он работает, объект имеет приемлемый, подходящий, правильный тип. Если операция не работает, объект не был подходящего типа. Знать тип редко помогает.

Просто попробуйте выполнить операцию и посмотрите, работает ли она.

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() Пример:

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

Ответ 6

Здесь фрагмент кода, который проверяет, является ли число целым числом или нет, он работает как для 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 an integer
isinstance(yourNumber, float)  # returns True if it a float

Обратите внимание, что Python 2 имеет оба типа int и long, в то время как Python 3 имеет только тип int. Источник

Если вы хотите проверить, является ли ваш номер числом с float, представляющим int, сделайте это

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

Если вам не нужно различать int и float, и вы согласны с любым из них, то ответ ninjagecko - это путь

import numbers

isinstance(yourNumber, numbers.Real)

Ответ 7

Вы можете использовать modulo, чтобы определить, является ли x целым числом. Метод isinstance(x, int) определяет только, является ли x целым числом по типу:

def isInt(x):
    if x%1 == 0:
        print "X is an integer"
    else:
        print "X is not an integer"

Ответ 8

Я знаю, что это старая тема, но это то, что я использую, и я подумал, что это может помочь.

Он работает в 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))

Ответ 9

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 является float, но значение целое, поэтому, если вы хотите проверить значение integer, вы не можете использовать isinstance, и вам нужно сравнить значения, а не типы.

Ответ 10

как насчет этого решения?

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

Ответ 11

Пробовал в Python версии 3.6.3 Shell

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

Не могу понять, на что работать.

Ответ 12

absolute = abs(x)
rounded = round(absolute)
if absolute - rounded == 0:
  print 'Integer number'
else:
  print 'notInteger number'

Ответ 13

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

Ответ 14

Попробуй это...

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

Ответ 15

Обновление: попробуйте это


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)

Ответ 16

variable.isnumeric проверяет, является ли целое число:

 if myVariable.isnumeric:
    print('this varibale is numeric')
 else:
    print('not numeric')