logo

Определение типа числа в программировании: float или int?

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

Для определения типа числа — целого или дробного — можно использовать выражение (num % 1) !== 0, если предполагается работа с числом с плавающей точкой, или функцию Number.isInteger(num), если ожидаются целые числа. Иллюстрация на JavaScript коде:

JS
Скопировать код
const num = 10.5;
console.log(`Если это дробное число, то: ${ (num % 1) !== 0 }`); // true, потому что у числа 10.5 есть дробная часть
console.log(`Если это целое число, то: ${ Number.isInteger(num) }`); // false, число 10.5 не является целым

Различие между целыми и дробными числами

Для точного определения, является ли число целым или дробным, необходимо улавливать их основные характеристики. Целыми числами мы называем числа без дробной части, то есть это полный набор единиц. Дробные числа, которыми являются "числа с плавающей точкой", всегда содержат дробную часть, даже если это ноль (например, 5.0).

Методы определения типа числа в JavaScript

JavaScript предлагает несколько методов для определения типа числа. Поговорим о них подробнее, не забывая о тонкостях и возможных подводных камнях.

Проверка на число

Сначала стоит удостовериться, что значение, на котором мы делаем проверку, действительно является числовым. Вот как это осуществить:

JS
Скопировать код
function isValidNumber(value) {
  return Number(value) === value;
}

Полифил для Number.isInteger()

В стандарте ES5 функции Number.isInteger() нет в наличии. Решить эту проблему поможет следующий полифил:

JS
Скопировать код
Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' && 
    isFinite(value) && 
    Math.floor(value) === value;
};

Учет "небезопасных" чисел

JavaScript определяет пороговое значение для наибольшего безопасного числа (Number.MAX_SAFE_INTEGER). Выход за границы этого значения может влиять на точность проверок. Особое внимание стоит уделить обработке подобных значений.

Побитовые операции для определения целых чисел

Побитовые операции также подойдут для определения целых чисел, однако будьте внимательны: они корректно работают только с числами, которые не превышают 32-битный диапазон:

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

Использование parseInt() с проверкой на равенство

Сочетание функции parseInt() с оператором равенства позволит выявлять целочисленные значения:

JS
Скопировать код
function isParsedInt(value) {
  return parseInt(value, 10) === value;
}

Однако стоит помнить, что parseInt приводит строки к числам, что может вызвать непредвиденные результаты: строка "123abc" будет интерпретирована как число 123.

Использование регулярных выражений для нахождения целых чисел в строках

Регулярные выражения могут быть удобным инструментом для проверки строк, содержащих целые числа:

JS
Скопировать код
const isIntRegex = /^-?\d+$/;
console.log(isIntRegex.test("10")); // true, потому что число 10, очевидно, является целым

Основные принципы безопасной работы с числами

Зная основные особенности JavaScript, можно избежать большинства ошибок:

  • Производите проверку на конечность: функция isFinite() поможет верифицировать значение перед определением его типа.
  • Проверяйте границы: значения, приближающиеся к Number.MIN_VALUE и Number.MAX_SAFE_INTEGER, требуют особого внимания.
  • Не забывайте об отрицательных целых числах: они также должны участвовать в проверках.
  • Строки, похожие на числа: приводите их к числовому виду перед тем как определить их тип.

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

В качестве визуализации можно представить, что вы разделяете яблоки (🍏) и персики (🍑):

Markdown
Скопировать код
Ведро А (🍏): Целые числа – они стабильны и надежны
Ведро В (🍑): Дробные числа – они менее предсказуемы

Принцип работы следующий:

JS
Скопировать код
Number.isInteger(value) ? '🍏' : '🍑';

Визуальная аналогия:

Markdown
Скопировать код
🔢 Число: 5  → 🍏 (Стабильно, целое)
🔢 Число: 5.2 → 🍑 (Менее стабильно, дробное)

Обозначения для ведер:

Markdown
Скопировать код
🍏 Целые числа поместим в это ведро: [1, 2, 3, ...]
🍑 Дробные числа пойдут сюда: [1.1, 2.5, 3.14159, ...]

Запомните: Каждому числу свое ведро!

Бонус: Проверка чисел со сложной структурой

Числа могут иметь сложные формы и представляться различными типами.

Экспоненциальная запись числа

Выражения вроде 1e2 считаются целыми числами. Переведите их в стандартный формат перед проверкой типа:

JS
Скопировать код
function isIntExponential(value) {
  return Number.isInteger(Number(value));
}

Проверка шестнадцатеричных и двоичных чисел

JavaScript интерпретирует строки, начинающиеся на 0x, как шестнадцатеричные числа, и строки, начинающиеся на 0b, — как двоичные. Их следует преобразовать перед проверкой:

JS
Скопировать код
const hex = "0xFF";
console.log(Number.isInteger(parseInt(hex, 16))); // true, потому что шестнадцатеричное число также имеет числовое значение

Аналоги функций в языке PHP

Если вы знакомы с языком PHP, для вас не станут новостью функции is_int(), is_float() и ctype_digit().

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