Методы parseInt и parseFloat: особенности и альтернативы
Для преобразования строки в число в JavaScript используются два метода: parseInt - для целых чисел и parseFloat для чисел с плавающей запятой. В официальной документации про parseInt сказано примерно следующее:
Метод parseInt возвращает целое значение, равное числу, содержащемуся в его параметре. Если параметр не может быть обработан как целое, возвращается NaN.
И почти то же самое про parseFloat:
Метод parseFloat возвращает числовое значение, содержащееся в его параметре. Если параметр не может быть обработан как число с плавающей точкой, возвращается значение NaN.
Вроде бы все логично и понятно. Еще небольшое отличие, что parseInt имеет второй параметр - основание системы счисления, в которой рассматривается конвертируемое число, к нему мы вернемся чуть позже. А теперь от красивой теории перейдем к суровой практике.
Тепличные условия рассматривать не будем, сразу возьмем какую-нибудь корявую тестовую строку, например, "1234.56fuck":
Code (JavaScript) : Убрать нумерацию
- var a = "1234.56fuck";
- alert (parseInt(a));
- alert (parseFloat(a));
Code (JavaScript) : Убрать нумерацию
- var a = '12345.67';
- alert (a-0);
- var a = '12345.67fuck';
- alert (a-0);
Code (JavaScript) : Убрать нумерацию
- function StrToNum(a) {
- return (a-0);
- }
Переходим ко второй части Марлезонского балета. Попробуйте выполнить следующий пример сперва в уме, а затем в браузере:
Code (JavaScript) : Убрать нумерацию
- var a = '00012';
- var b = '00008';
- alert (parseInt(a) + parseInt(b));
Code (JavaScript) : Убрать нумерацию
- var a = '00012';
- var b = '00008';
- alert (StrToNum(a) + StrToNum(b));
Просмотров: 13470 | Комментариев: 6
Метки: JavaScript
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(31.03.2010 в 13:36):
А если я введу какое-то значение с клавиатуры на запрос скрипта? Переменные в примерах инициализированы только для наглядности. В реальном коде такой херни конечно не будет, все числовые переменные я всегда инициализирую как числовые.
64-ядерный процессор
(31.03.2010 в 12:27):
Вот код:
var a = 1234.56;
alert (parseInt(a));
alert (parseFloat(a));
Потому, что если нам нужно указать числовое значение, то кавычки не нужны. А если Мы напишем var a = "1234.56fuck"; или var a = '1234.56fuck'; то эта переменная будет восприниматься как текст.
А если мы укажем var a = 1234.56fuck; то JS выдаст ошибку.
var a = 1234.56;
alert (parseInt(a));
alert (parseFloat(a));
Потому, что если нам нужно указать числовое значение, то кавычки не нужны. А если Мы напишем var a = "1234.56fuck"; или var a = '1234.56fuck'; то эта переменная будет восприниматься как текст.
А если мы укажем var a = 1234.56fuck; то JS выдаст ошибку.
Infocatcher
(28.03.2010 в 03:29):
С правильными руководствами вообще плохо - или поди пойми, какое правильное, или уже не надо. :)
А parseInt и parseFloat, пожалуй, полезны только для заведомо "хвостатых" строк типа "10px", например.
А заговор - вот тут:
[] == ![] // true
Найдено здесь: http://javascript.ru/forum/off...n-kills.html
А parseInt и parseFloat, пожалуй, полезны только для заведомо "хвостатых" строк типа "10px", например.
А заговор - вот тут:
[] == ![] // true
Найдено здесь: http://javascript.ru/forum/off...n-kills.html
ManHunter
(28.03.2010 в 00:34):
Только во всех руководствах для преобразования строки в число рекомендуют использовать именно parseInt и parseFloat. И по поводу неявного приведения поведение интерпретатора отличается в случае, например, вычитания и сложения. '123'+3 даст строковую '1233', но '123'-3 даст 120. Так что кругом заговор и неоднозначность :)
Infocatcher
(28.03.2010 в 00:17):
По идее, для преобразования (все же "parse" - это не "преобразовать") предполагается использование функции Number:
Number("010"); // 10
Number("10qwe"); // NaN
По все той же идее для неявного приведения типов, когда строка используется в числовом контексте, интерпретатор должен делать то же самое, что и Number().
Number("010"); // 10
Number("10qwe"); // NaN
По все той же идее для неявного приведения типов, когда строка используется в числовом контексте, интерпретатор должен делать то же самое, что и Number().
Добавить комментарий
Заполните форму для добавления комментария
Javascript является подмножеством ECMAscript. Стандартами этого языка и пользовались разработчики Javascript.