Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странная фишка функции parseInt (https://javascript.ru/forum/misc/43649-strannaya-fishka-funkcii-parseint.html)

freeneutron 15.12.2013 15:22

Странная фишка функции parseInt
 
Как думаете, каков результат исполнения такого кода:
[parseInt(1e-6),parseInt(1e-7)]
?
Интуиция подсказывает, что:
[0,0]

Но как ни странно результат будет:
[0,1]

Я проверил в Опере, ФФ, Хроме, ИЕ, а так же в NodeJS. Результат везде один и тот же. Поэтому и назвал эту странность фишкой. Только логика ее мне абсолютно не понятна. А кто-нибудь вообще понимает в чем тут логика?

oneguy 15.12.2013 16:33

Дело в том, что функция parseInt не предназначена для округления чисел, а считывает целое число из строки, как и говорит название функции. Но многие этого не знают и используют её не по назначению. Да, она работает именно со строками! В данном случае аргументы преобразуются в строки "0.000001" и "1e-7".
Хочется крикнуть на весь мир: никогда не используйте parseInt для округления! Для округления вниз используйте Math.floor.

freeneutron 15.12.2013 17:08

Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.

SV0L0CH 15.12.2013 17:23

Есть и другие особенности. Например в этой функции предусмотрен второй аргумент, что усложняет её использование в методе map для массива, нужно оборачивать.

Antonius 16.12.2013 02:29

Цитата:

Сообщение от freeneutron (Сообщение 286748)
Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.

Почему? ParseInt предназначена для приведения строки к числу, в этой области применять ее можно свободно.

Для округления стоит использовать функции округления из Math, например.


Часовой пояс GMT +3, время: 13:15.