Проверка целых чисел в JavaScript: методы и примеры
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для определения, является ли число целым или имеет дробную часть, мы можем использовать оператор остатка от деления (%
). Если после выполнения вычислений остаток присутствует, это указывает на то, что представленное число является дробным. Взгляните на пример кода:
const isWhole = num => num % 1 === 0;
console.log(isWhole(10)); // Число 10 целое, об этом нет сомнений. true
console.log(isWhole(10.5)); // Здесь мы отчетливо видим наличие дроби. false
Подробное изучение дробных и целых чисел
Определение того, относится ли число к дробным или целым, играет ключевую роль в математических вычислениях, при проверке достоверности данных, а также при форматировании. Давайте детально рассмотрим разные методы и специфические случаи.
Возможности оператора модуля
С помощью выражения num % 1
можно определить, является ли число целым, и получить его дробную часть. Это применимо даже для чисел с нулевой дробной частью, например 12.0
.
const getDecimalPart = num => num % 1;
console.log(getDecimalPart(10.5)); // Мы успешно извлекли дробную часть, она равна 0.5
Применение Number.isInteger()
Метод Number.isInteger()
используется для точной проверки, но его отсутствие в IE11 может создать неудобства для пользователей старых версий браузеров.
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 для чисел с двойной точностью.
console.log(Number.isSafeInteger(10**16)); // Число велико, но оно находится в безопасном диапазоне. true
console.log(Number.isSafeInteger(10**16+1)); // Здесь наблюдается превышение данного диапазона. false
Строковый метод
Можно также преобразовать число в строку и проверить на отсутствие десятичной точки. Но помните, что "100.00"
все равно будет считаться числом с дробной частью.
const isWholeFromStr = strNum => !strNum.includes(".");
console.log(isWholeFromStr("100.00")); // Присутствует десятичная точка, значит это дробное число, вне зависимости от нулей. false
Использование равенства после Math.floor()
Старый, но надежный метод — использование равенства Math.floor(num) == num
для определения того, является ли число целым.
console.log(Math.floor(10) === 10); // С числом 10 всё в порядке, оно целое. true
console.log(Math.floor(10.5) === 10.5); // "Половина", Вы так настаиваете на том, что являетесь целым числом? false
Определите для себя наиболее подходящий метод проверки с учетом требований к производительности, наглядности и совместимости. Не забывайте, что num % 1
может оказаться быстрее, в то время как Number.isInteger(num)
обеспечивает лучшую точность.
Визуализация
Условно, это можно представить как иллюстрацию с фруктами:
🍏 Целое Яблоко (1.0) -> Целое число 🟢
🍏🔪 Половинка Яблока (1.5) -> Дробное число 🔴
А на практике в JavaScript это выглядит примерно так:
function isWholeNumber(value) {
return value % 1 === 0;
}
// 🍏 Целое Яблоко (1.0) – Никакой дробной части не обнаружено. TRUE
// 🍏🔪 Половинка Яблока (1.5) – Дробная часть присутствует. FALSE
Здесь Целое Яблоко символизирует Целое число
, а Половинка Яблока становится воплощением Дробного числа
.
Анализ крайних случаев и специфических числовых исключений
В JavaScript есть специфические числовые значения и крайние случаи, которые требуют особого внимания. Исследуем их подробнее:
Обработка NaN и Infinity
При работе со значениями NaN
и Infinity
следует обращаться с особой осторожностью. В данном случае оператор остатка от деления не сможет вам помочь.
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 для точных вычислений.
Полезные материалы
- Number.isInteger() – JavaScript | MDN — Авторитетный справочник MDN по
Number.isInteger()
. - javascript – How do I check that a number is float or integer? – Stack Overflow — Интеллектуальные решения и полезные обсуждения от опытных разработчиков.
- JavaScript Number Methods — Обзор многочисленных методов, используемых при работе с числами в JavaScript.
- Numbers — Подробный учебник, освещающий числовые аспекты JavaScript.
- ECMAScript® 2024 Language Specification — Официальная спецификация, которая описывает объект Number.
- You Don't Know JS: Types & Grammar — Глубокий анализ типов и грамматики JavaScript в серии книг "You Don't Know JS".
- Shortest Way to Check if a Number is an Integer — Блог-пост, раскрывающий самый короткий путь проверки на целочисленность.