ParseInt: примеры (JAVASCRIPT)
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"); // автоматическое распознавание hex10
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); // 1010 10
Python: конструкторы int() или функция int.from_bytes(). int() преобразует строку или число в целое, поддерживает указание основания системы счисления.
int('10') # 10
int('A', 16) # 1010 10
MySQL: Функция CAST() или оператор преобразования. Преобразует значение в целое число.
SELECT CAST('10' AS UNSIGNED); -- 1010
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"); // 108 10
2. Ожидание, что parseInt округляет числа с плавающей запятой.
parseInt("10.95"); // 10, а не 1110
3. Попытка разобрать строку, которая начинается не с цифры, и игнорирование возврата NaN.
parseInt("abc"); // NaN
parseInt(""); // NaNNaN NaN
4. Использование для преобразования больших чисел, выходящих за пределы безопасного целочисленного диапазона.
parseInt("999999999999999999999"); // 1e+211000000000000000000000
Изменения в последних версиях
Наиболее значительное изменение произошло в ECMAScript 5 (2009 год). Функция перестала интерпретировать строки, начинающиеся с ведущего нуля, как восьмеричные числа, если система счисления не указана явно. Теперь по умолчанию используется десятичная система, кроме строк, начинающихся с "0x" или "0X", которые обрабатываются как шестнадцатеричные.
ECMAScript 2015 (ES6) не внёс изменений в поведение parseInt, но добавил метод Number.parseInt(), идентичный глобальной функции, для модульности и ясности.
Расширенные примеры
Разбор строк с ведущими пробелами и знаками.
parseInt(" 42");
parseInt("-42");
parseInt("+42");42 -42 42
Остановка разбора при встрече нечислового символа.
parseInt("42px");
parseInt("px42");42 NaN
Работа с различными системами счисления.
parseInt("11", 2); // 3 (бинарное)
parseInt("11", 8); // 9 (восьмеричное)
parseInt("11", 16); // 17 (шестнадцатеричное)
parseInt("11", 36); // 37 (максимальное основание)3 9 17 37
Особенности с некорректными аргументами radix.
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 приводит к потере точности.
parseInt(123456789012345678901234567890n.toString());1.2345678901234568e+29