Подтвердить что ты не робот

Определение того, является ли значение целым числом в Python

Я хотел бы определить, является ли числовое значение в Python целым числом. Например, данный:

y = x / 3

Я хочу различать значения x, которые равномерно делятся на 3, которые не являются.

4b9b3361

Ответ 1

if x % 3 == 0:
    print 'x is divisible by 3'

Ответ 2

Целые числа не имеют десятичных знаков. Если вы имели в виду "проверить, если число получил десятичные числа в Python", вы можете сделать:

not float(your_number).is_integer()

Ответ 3

Изменить: как указал Олли в комментарии ниже этого сообщения, is_integer является частью стандартной библиотеки, и поэтому не следует переопределять, как я сделал ниже.

Эта функция использует тот факт, что каждое другое целое число будет иметь хотя бы одно число, делящееся на два без остатка. Любое ненулевое дробное представление в n или n+1 приведет к тому, что обе n%2 и (n+1)%2 будут иметь остаток. Это имеет то преимущество, что целые числа, представленные как значения float, вернут True. Функция работает правильно для положительных и отрицательные числа и нуль, насколько я могу определить. Как упоминалось в функции, он не подходит для значений, очень близких к целым числам.

def isInteger(n):
    """Return True if argument is a whole number, False if argument has a fractional part.

    Note that for values very close to an integer, this test breaks. During
    superficial testing the closest value to zero that evaluated correctly
    was 9.88131291682e-324. When dividing this number by 10, Python 2.7.1 evaluated
    the result to zero"""

    if n%2 == 0 or (n+1)%2 == 0:
        return True
    return False

Ответ 4

x % 3 == 0 будет True, если x / 3 - целое число.

Ответ 5

Здесь другой метод:

x = 1/3  # insert your number here
print(x - int(x) == 0)  # True if x is a whole number, False if it has decimals.

Это работает, потому что int (x) по существу занимает пол номера (например, 3.6453 → 3). Если что-то осталось, как только вы вычитаете пол, это не могло быть целым числом.

Ответ 6

Предполагая, что вы имеете в виду, что строка, содержащая цифры, также имеет десятичную точку:

Python 2.6.6 (r266:84292, Apr 20 2011, 11:58:30) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> number='123.4'
>>> '.' in number
True
>>> number='123'
>>> '.' in number
False
>>>

Чтобы проверить, является ли он интегралом, вы можете установить mod 1:

>>> 1.0/3 % 1
0.33333333333333331
>>> 1/3 % 1
0

Ответ 7

В Python 2 деление int на int возвращает int (если только python не был вызван с опцией -Qnew, или from __future__ import division находится в начале источника, в этом случае / возвращает float ); a // указывает целочисленное деление.

В Python 3 деление int на int возвращает float, если вы используете "/" или int, если вы используете "//".

Если вы хотите узнать, будет ли int делиться на другой int точно, используйте "%" для поиска остатка.

Ответ 8

конвертировать 1.0 => 1 и конвертировать 1.x => 1.x

Этот код, если числа с плавающей запятой имеют десятичную часть, например 1,5, вернет 1,5, а если 35,00, вернет 35:

a = ReadFrom()    
if float(a).is_integer(): # it is an integer number like 23.00 so return 23
       return int(a)
 else: # for numbers with decimal part like : 1.5 return 1.5
       return float(a)

Ответ 9

Лучше всего сделать свое определение перед делением, считая, что ваша переменная x является целым числом.

Попытка выполнить тесты равенства или сравнения чисел с плавающей запятой опасна: http://www.lahey.com/float.htm

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