2009-08-24 2 views
25

Как я могу проверить переменную, чтобы выяснить, содержит ли она число, и целое число?Как определить, является ли заданное число целым?

, например.

if (1.589 == integer) // false 
if (2 == integer) // true 

Любые подсказки?

+0

возможно дубликат [Как проверить, является ли переменная целое число в JavaScript?] (HTTP://переполнение стека.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript) –

ответ

50
num % 1 === 0 

Это будет преобразовывать num к типу Number первый, так что любое значение, которое может быть преобразовано в целое число будет пройти тест (например '42', true).

Если вы хотите, чтобы исключить их, дополнительно проверьте

typeof num === 'number' 

Вы можете также использовать parseInt(), чтобы сделать это, то есть

parseInt(num) == num 

для нетипизированного проверки и

parseInt(num) === num 

для типизированной проверки.

Обратите внимание, что испытания не являются эквивалентными: проверка через parseInt() будет сначала конвертировать в String, так, например, true не будет проходить проверку.

Также обратите внимание, что нетипизированная проверка через parseInt() будет правильно обрабатывать шестнадцатеричные строки, но не в состоянии для значения в восьмиричных (т.е. числовых строках с лидирующим нулем), поскольку они признаны parseInt(), но не Number(). Если вам нужно обрабатывать десятичные строки с ведущими нулями, вам нужно указать аргумент radix.

+0

Это делает это, спасибо. – jirkap

-1

Существует функция javascript, называемая isNaN (val), которая возвращает true, если val не является числом.

Если вы хотите использовать Вэл как число, вам необходимо отлиты с использованием ParseInt() или parseFloat()

EDIT: упс. Исправлена ​​ошибка, как указано в комментариях

+1

Просто от имени функции я бы подумал, что «isNaN» вернет true, если val «is * Not * a Number», что и означает NaN. Опечатка? –

+1

isNaN (val) возвращает true, если val не является числом, но возвращает false и для нецелых чисел, поэтому он не решит проблему. – Amok

2

Как об этом:

if((typeof(no)=='number') && (no.toString().indexOf('.')==-1)) 
+0

Это не сработает, потому что 8.000 по-прежнему является целым числом. –

+1

Возможно, это зависит от вашего определения (и прецедента) целого числа – bdukes

+0

Хмм. Правда. По математическим вопросам я склонен думать о них в терминах чисел, а не цифр - следовательно, мой комментарий выше. –

0

можно либо использовать Javas разбора возможности или же попробовать оператор по модулю% ...

2

Будет ли это не работает:

if (parseInt(number, 10) == number) 
{ 
    alert(number + " is an integer."); 
} 
+1

Вы всегда должны включать параметр radix: parseInt (число, 10) – Greg

+0

Ой, да. Починил это. – paracycle

+0

@Greg: необязательно - может потребоваться пройти шестнадцатеричные символы; восьмеричные ошибки будут терпеть неудачу, поскольку они распознаются 'parseInt()', но не 'Number()' – Christoph

6

У кого-то уже есть done it for you.

+0

Как говорит @Greg выше (http://stackoverflow.com/questions/1323314/detecting-if-a-given-number- is-an-integer # comment-1157013), это должно включать параметр radix для parseInt. – bdukes

9

Это работает:

if (Math.floor(x) == x) 
+0

У этого есть преимущество, если x является 'false'; –

4

Вы можете использовать формальное определение целого числа:

Math.floor(x) === x