ParseInt: примеры (JAVASCRIPT)

Преобразование строк в целые числа с помощью parseInt
Раздел: Глобальные функции, Парсинг чисел
parseInt(string: String, [radix]: Number): Number

Функция parseInt в JavaScript

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

Синтаксис: parseInt(string, radix)

  • string: Преобразуемая строка. Если аргумент не является строкой, он преобразуется в неё. Функция анализирует строку посимвольно, пока не встретит символ, недопустимый в указанной системе счисления, затем останавливается и возвращает число, полученное из предыдущих допустимых символов.
  • radix (необязательный): Целое число от 2 до 36, представляющее систему счисления. Если аргумент radix не указан или равен 0, JavaScript пытается определить систему счисления автоматически: строки, начинающиеся с "0x" или "0X", интерпретируются как шестнадцатеричные. Для исторических причин строки, начинающиеся с "0", могут интерпретироваться как восьмеричные в устаревших реализациях, но современный стандарт ECMAScript 5 по умолчанию использует десятичную систему, за исключением явного указания на шестнадцатеричный формат.

Возвращаемое значение: целое число, полученное в результате разбора строки. Если первый символ строки не может быть преобразован в число, функция возвращает NaN.

Примеры использования

parseInt("10");
10
parseInt("10.95");
10
parseInt("10", 2); // двоичная система
2
parseInt("A", 16); // шестнадцатеричная система
10
parseInt("0xA"); // автоматическое распознавание hex
10
parseInt("010"); // может быть 10 или 8 в зависимости от реализации
10
parseInt("Hello");
NaN

Похожие функции в JavaScript

parseFloat() анализирует строку и возвращает число с плавающей запятой. Используют, когда нужно извлечь десятичное число.

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

Унарный плюс (+) выполняет быстрое преобразование строки в число, аналогичное Number().

Math.floor(), Math.ceil(), Math.trunc() работают с уже готовыми числами, округляя их.

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

Аналоги в других языках программирования

PHP: функция intval(). Возвращает целое значение переменной, позволяет указать систему счисления.

echo intval('10'); // 10
echo intval('0xA', 16); // 10
10
10

Python: конструкторы int() или функция int.from_bytes(). int() преобразует строку или число в целое, поддерживает указание основания системы счисления.

int('10') # 10
int('A', 16) # 10
10
10

MySQL: Функция CAST() или оператор преобразования. Преобразует значение в целое число.

SELECT CAST('10' AS UNSIGNED); -- 10
10

C: Функция atoi() (ASCII to integer) или strtol(). strtol() более гибкая, позволяет определить систему счисления и обработать ошибки.

#include 
int num = atoi("10"); // 10
long num2 = strtol("A", NULL, 16); // 10
10
10

Типичные ошибки

1. Не указание системы счисления при разборе строк, начинающихся с нуля, что может привести к неоднозначности в старых браузерах.

// В старом ECMAScript 3
parseInt("010"); // 8
// В ECMAScript 5 и новее
parseInt("010"); // 10
8
10

2. Ожидание, что parseInt округляет числа с плавающей запятой.

parseInt("10.95"); // 10, а не 11
10

3. Попытка разобрать строку, которая начинается не с цифры, и игнорирование возврата NaN.

parseInt("abc"); // NaN
parseInt(""); // NaN
NaN
NaN

4. Использование для преобразования больших чисел, выходящих за пределы безопасного целочисленного диапазона.

parseInt("999999999999999999999"); // 1e+21
1000000000000000000000

Изменения в последних версиях

Наиболее значительное изменение произошло в ECMAScript 5 (2009 год). Функция перестала интерпретировать строки, начинающиеся с ведущего нуля, как восьмеричные числа, если система счисления не указана явно. Теперь по умолчанию используется десятичная система, кроме строк, начинающихся с "0x" или "0X", которые обрабатываются как шестнадцатеричные.

ECMAScript 2015 (ES6) не внёс изменений в поведение parseInt, но добавил метод Number.parseInt(), идентичный глобальной функции, для модульности и ясности.

Расширенные примеры

Разбор строк с ведущими пробелами и знаками.

Пример javascript
parseInt("   42");
parseInt("-42");
parseInt("+42");
42
-42
42

Остановка разбора при встрече нечислового символа.

Пример javascript
parseInt("42px");
parseInt("px42");
42
NaN

Работа с различными системами счисления.

Пример javascript
parseInt("11", 2); // 3 (бинарное)
parseInt("11", 8); // 9 (восьмеричное)
parseInt("11", 16); // 17 (шестнадцатеричное)
parseInt("11", 36); // 37 (максимальное основание)
3
9
17
37

Особенности с некорректными аргументами radix.

Пример javascript
parseInt("10", 0); // 10 (рассматривается как 10)
parseInt("10", 1); // NaN (основание меньше 2)
parseInt("10", 37); // NaN (основание больше 36)
parseInt("10", null); // 10 (null преобразуется в 0)
parseInt("10", undefined); // 10 (система определяется автоматически)
10
NaN
NaN
10
10

Использование с числами типа BigInt приводит к потере точности.

Пример javascript
parseInt(123456789012345678901234567890n.toString());
1.2345678901234568e+29

JS parseInt function comments

En
ParseInt Parses a string argument and returns an integer of the specified radix