Я хотел бы определить, является ли числовое значение в Python целым числом. Например, данный:
y = x / 3
Я хочу различать значения x
, которые равномерно делятся на 3, которые не являются.
Я хотел бы определить, является ли числовое значение в Python целым числом. Например, данный:
y = x / 3
Я хочу различать значения x
, которые равномерно делятся на 3, которые не являются.
if x % 3 == 0:
print 'x is divisible by 3'
Целые числа не имеют десятичных знаков. Если вы имели в виду "проверить, если число получил десятичные числа в Python", вы можете сделать:
not float(your_number).is_integer()
Изменить: как указал Олли в комментарии ниже этого сообщения, 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
x % 3 == 0
будет True
, если x / 3
- целое число.
Здесь другой метод:
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). Если что-то осталось, как только вы вычитаете пол, это не могло быть целым числом.
Предполагая, что вы имеете в виду, что строка, содержащая цифры, также имеет десятичную точку:
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
В Python 2 деление int на int возвращает int (если только python не был вызван с опцией -Qnew
, или from __future__ import division
находится в начале источника, в этом случае /
возвращает float ); a //
указывает целочисленное деление.
В Python 3 деление int на int возвращает float, если вы используете "/" или int, если вы используете "//".
Если вы хотите узнать, будет ли int делиться на другой int точно, используйте "%" для поиска остатка.
Этот код, если числа с плавающей запятой имеют десятичную часть, например 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)
Лучше всего сделать свое определение перед делением, считая, что ваша переменная x является целым числом.
Попытка выполнить тесты равенства или сравнения чисел с плавающей запятой опасна: http://www.lahey.com/float.htm
Ответ уже предоставлен с использованием модуля, прежде чем выполнять деление, чтобы убедиться, что одно целое является разделяемым другим целым. После того, как вы выполните разделение и имеете дело с возможными значениями с плавающей запятой, тогда числа больше не являются целыми целыми числами или нет.