JavaScript: преобразовать строку в число

Вопрос

Как преобразовать строку в число на JavaScript?


Ответ №1

Функции parseFloat() и parseInt()

В JavaScript существуют 2 встроенные функции для преобразования строк в числа: parseFloat() и parseInt().

parseFloat() принимает аргументом строку, которую необходимо привести к численному типу, и возвращает число типа float. Число должно содержаться в начале строки. Если после числа в строке идут ещё какие-то символы, то они отсекаются. Дробная часть числа должна быть записана через точку (запятая не воспринимается как разделитель). В случае, если parseFloat() не может преобразовать строку, то она возвращает NaN.

Также функция может обработать «число n, умноженное на 10 в степени x», которое в программировании принято записывать через букву E, например: 0.5E6 или 0.5E+6. Степень может быть также отрицательная: 0.5E-6, что равно 0.5*10^-6 или 0.5/1000000.

parseFloat('3.78kg')   // 3.78
parseFloat('kg33')   // NaN
parseFloat('0004.111')   // 4.111
parseFloat('0x66')   // 0
parseFloat('.5')   // 0.5
parseFloat('-.5')   // -0.5
parseFloat('0.5e6')   // 500000
parseFloat('0.03E+2')   // 3
parseFloat('3E-4')   // 0.0003
parseFloat('-3E-4')   // -0.0003

Функция parseInt(string[, radix]) принимает в качестве первого аргумента строку, анализирует её и возвращает целое число (тип integer). Функция пытается анализировать систему счисления, в которой записано число в исходной строке (например, десятичная, восьмеричная или шестнадцатеричная - но не только эти). Также систему счисления можно указать явно, передав её вторым параметром radix. Параметр radix может принимать любое число от 2 до 36 (в системах выше 10-й используются буквы английского алфавита, от A до Z).

Числа типа 1.5e6 функция не обрабатывает так, как parseFloat().

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

parseInt('25')   // 25
parseInt('-25')   // -25
parseInt('45.12')   // 45
parseInt('045',10)   // 45
parseInt('70',8)    // 56  (70 в восьмеричной системе это 56 в десятичной)
parseInt('070')     // 56 (ВАЖНО!!! нуль вначале заставит функцию проанализировать строку как восьмеричное число)
parseInt('88',8)   // NaN (в восьмеричной системе нет цифры 8)
parseInt('a1')   // NaN (ВАЖНО!!! Функция по умолчанию не воспринимает число как 16-ричное, если не дописать в начале строки 0x)
parseInt('a1',16)   // 161 (здесь явно указана система счисления)
parseInt('0xa1')   // 161 (правильный формат 16-ричного числа, можно не указывать второй параметр)
parseInt('099')   // 0 (ВАЖНО!!! Число воспринимается как восьмеричное, но содержащее недопустимые символы)
parseInt('0.5e6')   // 0 (ВАЖНО!!! не работает как parseFloat)
parseInt('ZZ',36)   // 1295
parseInt('-FF')   // NaN
parseInt('-FF',16)   // -255

Если Вы обрабатываете данные из текстового поля, которые вводит пользователь, всегда используйте parseInt() вместе со вторым параметром radix, это обезопасит Ваш код от неожиданных результатов.

Можете испробовать работу этих функций в примере ниже:

Пример
Введите строку:




Результат:

138 комментария

Добавить комментарий для Diana Henderson Отменить ответ


(обязательно)