Вход

Просмотр полной версии : Странная фишка функции parseInt


freeneutron
15.12.2013, 15:22
Как думаете, каков результат исполнения такого кода:[parseInt(1e-6),parseInt(1e-7)]?
Интуиция подсказывает, что:
[0,0]
Но как ни странно результат будет:
[0,1]
Я проверил в Опере, ФФ, Хроме, ИЕ, а так же в NodeJS. Результат везде один и тот же. Поэтому и назвал эту странность фишкой. Только логика ее мне абсолютно не понятна. А кто-нибудь вообще понимает в чем тут логика?

oneguy
15.12.2013, 16:33
Дело в том, что функция parseInt (http://javascript.ru/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
Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.

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

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