Проверка целых чисел в JavaScript: методы и примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для определения, является ли число целым или имеет дробную часть, мы можем использовать оператор остатка от деления (%). Если после выполнения вычислений остаток присутствует, это указывает на то, что представленное число является дробным. Взгляните на пример кода:

JS
Скопировать код
const isWhole = num => num % 1 === 0;

console.log(isWhole(10));   // Число 10 целое, об этом нет сомнений. true
console.log(isWhole(10.5)); // Здесь мы отчетливо видим наличие дроби. false
Кинга Идем в IT: пошаговый план для смены профессии

Подробное изучение дробных и целых чисел

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

Возможности оператора модуля

С помощью выражения num % 1 можно определить, является ли число целым, и получить его дробную часть. Это применимо даже для чисел с нулевой дробной частью, например 12.0.

JS
Скопировать код
const getDecimalPart = num => num % 1;

console.log(getDecimalPart(10.5)); // Мы успешно извлекли дробную часть, она равна 0.5

Применение Number.isInteger()

Метод Number.isInteger() используется для точной проверки, но его отсутствие в IE11 может создать неудобства для пользователей старых версий браузеров.

JS
Скопировать код
console.log(Number.isInteger(10));      // Число 10 без сомнений является целым. true
console.log(Number.isInteger(NaN));     // NaN, в свою очередь, не является целым числом. false
console.log(Number.isInteger(Infinity)); // И бесконечность также не принадлежит к целым числам. false

Использование Number.isSafeInteger()

Метод Number.isSafeInteger() подходит для работы с астрономически большими числами. Он убедится, что число находится в рамках безопасного диапазона IEEE-754 для чисел с двойной точностью.

JS
Скопировать код
console.log(Number.isSafeInteger(10**16));  // Число велико, но оно находится в безопасном диапазоне. true
console.log(Number.isSafeInteger(10**16+1)); // Здесь наблюдается превышение данного диапазона. false

Строковый метод

Можно также преобразовать число в строку и проверить на отсутствие десятичной точки. Но помните, что "100.00" все равно будет считаться числом с дробной частью.

JS
Скопировать код
const isWholeFromStr = strNum => !strNum.includes(".");

console.log(isWholeFromStr("100.00"));   // Присутствует десятичная точка, значит это дробное число, вне зависимости от нулей. false

Использование равенства после Math.floor()

Старый, но надежный метод — использование равенства Math.floor(num) == num для определения того, является ли число целым.

JS
Скопировать код
console.log(Math.floor(10) === 10); // С числом 10 всё в порядке, оно целое. true
console.log(Math.floor(10.5) === 10.5); // "Половина", Вы так настаиваете на том, что являетесь целым числом? false

Определите для себя наиболее подходящий метод проверки с учетом требований к производительности, наглядности и совместимости. Не забывайте, что num % 1 может оказаться быстрее, в то время как Number.isInteger(num) обеспечивает лучшую точность.

Визуализация

Условно, это можно представить как иллюстрацию с фруктами:

Markdown
Скопировать код
🍏 Целое Яблоко (1.0) -> Целое число 🟢
🍏🔪 Половинка Яблока (1.5) -> Дробное число 🔴

А на практике в JavaScript это выглядит примерно так:

JS
Скопировать код
function isWholeNumber(value) {
  return value % 1 === 0;
}

// 🍏 Целое Яблоко (1.0) – Никакой дробной части не обнаружено. TRUE
// 🍏🔪 Половинка Яблока (1.5) – Дробная часть присутствует. FALSE

Здесь Целое Яблоко символизирует Целое число, а Половинка Яблока становится воплощением Дробного числа.

Анализ крайних случаев и специфических числовых исключений

В JavaScript есть специфические числовые значения и крайние случаи, которые требуют особого внимания. Исследуем их подробнее:

Обработка NaN и Infinity

При работе со значениями NaN и Infinity следует обращаться с особой осторожностью. В данном случае оператор остатка от деления не сможет вам помочь.

JS
Скопировать код
const isActualNumber = num => !isNaN(num) && isFinite(num) && num % 1 === 0;

console.log(isActualNumber(NaN));        // NaN не является числом. false
console.log(isActualNumber(Infinity));   // Подобно NaN, бесконечность также не является числом. false

Использование больших чисел

При работе с числами, превышающими значения Number.MAX_SAFE_INTEGER, язык JavaScript может вести себя непредсказуемо. Будьте готовы к этому, используя такие средства как BigInt или библиотеки, например big.js для точных вычислений.

Полезные материалы

  1. Number.isInteger() – JavaScript | MDN — Авторитетный справочник MDN по Number.isInteger().
  2. javascript – How do I check that a number is float or integer? – Stack Overflow — Интеллектуальные решения и полезные обсуждения от опытных разработчиков.
  3. JavaScript Number Methods — Обзор многочисленных методов, используемых при работе с числами в JavaScript.
  4. Numbers — Подробный учебник, освещающий числовые аспекты JavaScript.
  5. ECMAScript® 2024 Language Specification — Официальная спецификация, которая описывает объект Number.
  6. You Don't Know JS: Types & Grammar — Глубокий анализ типов и грамматики JavaScript в серии книг "You Don't Know JS".
  7. Shortest Way to Check if a Number is an Integer — Блог-пост, раскрывающий самый короткий путь проверки на целочисленность.
Свежие материалы