Метод parseFloat
преобразует строковый аргумент в число с плавающей точкой. Если во время преобразования он обнаруживает неподходящий символ, то заканчивает процесс и возвращает результат.
Допустимы начальные и конечные пробелы.
Если аргумент не может быть преобразован в число - возвращает NaN
Пример: все вызовы вернут 3.14
parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");
var x = "3.14";
parseFloat(x);
parseFloat("3.14more non-digit characters");
Пример: возврат NaN
parseFloat("тест") // NaN
Для более строгого преобразовния строки в число используйте оператор "+". Он возвращает NaN, если строка в точности не является числом.
str = "3.14"
+str == parseFloat(str)
+"3.14abc" // NaN, но
parseFloat("3.14abc") // = 3.14
Хорошобы явно указать:1)что запятая вместо точки приводит к ошибке.
2) что происходит если не цифровой символ внутри 12ф34 - тоже NaN?.
3) Что точка используется всегда независимо от настройки culture операционной системы как, например, в C#.
Всё же запятая не приводит к ошибке.
parseFloat как и parseInt сканирует строку по шаблону. Все символы не входящие в шаблон (включая запятую) отбрасываются. NaN выдается только в том случае если первый символ не попал под шаблон. Пробелы в начале строки отбрасываются (может быть и другие пробельные символы, лень тестить:))
parseFloat(34f22)//=34
parseFloat(34,22//=34
parseFloat(34.22)//=34.22
parseFloat(f34.22)//=NaN - первый символ нечисловой
parseFloat(34e2)//=3400
parseFloat(34e2e2)//=3400
parseFloat(34ee2)//=34 - после первой e нет порядка числа.
parseFloat(e2)//=NaN - нет значимой части
parseInt(Infinity) = NaN
parseFloat(Infinity) = Infinity
Почему так?
чтобы понять ответ на этот вопрос нужно иметь высшее образование и знать а нахера в яваскрипт есть undefined type
Не надо хамить. Не хотите отвечать не пишите!
потому что разработчикам так захотелось , что они курили в этот момент осталось тайной, а вообще если подумать то логика просматривается (чего нельзя сказать о здравом смысле=3)
parseFloat(Infinity) = Infinity
Думаю, там такой алгоритм
1) вначале приводим параметр к строке
2) затем ищем внутри точки, и берем часть строки до второй точки
(например, parseFloat('0.1.2ю') === 0.1 )
3) затем смотрит, число ли перед нами Number('0.1')
В итоге parseFloat(Infinity) = Infinity
parseInt действует по другому, он ищет первое вхождение цифр, если их нет - то NAN
По поводу:
parseInt(Infinity) = NaN
parseFloat(Infinity) = Infinity
по всей видимости потому, что typeof(Infinity) = "number", соответственно в случае с parseFloat() возвращает значение как есть, без преобразований(ну number и number), а в случае с parseInt() пытается преобразовать в целое число, что с точки зрения бесконечности невозможно, а раз невозможно привести к числу - значит это NaN
parseInt(Infinity) = NaN
parseFloat(Infinity) = Infinity
--------
представьте число в виде x,y. где x и y бесконечное кол-во цифр (1.999 > 1). по этому и логично, что parseInt делает из 999...,999... = 999... , а parseFloat оставляет как есть. думаю именно так.. в таком случае логика существует)
Большое спасибо за вашу помощь, однако, если быть до конца честным, я пишу все свои собственные работы, так chained echoes как не хочу тратить деньги на то, что я способен сделать. Однако для тех, кто, например, подрабатывает во время учебы или не хочет тратить деньги на ветер.