Просмотр полной версии : Странная фишка функции parseInt
freeneutron
15.12.2013, 15:22
Как думаете, каков результат исполнения такого кода:[parseInt(1e-6),parseInt(1e-7)]?
Интуиция подсказывает, что:
[0,0]
Но как ни странно результат будет:
[0,1]
Я проверил в Опере, ФФ, Хроме, ИЕ, а так же в NodeJS. Результат везде один и тот же. Поэтому и назвал эту странность фишкой. Только логика ее мне абсолютно не понятна. А кто-нибудь вообще понимает в чем тут логика?
Дело в том, что функция parseInt (http://javascript.ru/parseInt) не предназначена для округления чисел, а считывает целое число из строки, как и говорит название функции. Но многие этого не знают и используют её не по назначению. Да, она работает именно со строками! В данном случае аргументы преобразуются в строки "0.000001" и "1e-7".
Хочется крикнуть на весь мир: никогда не используйте parseInt для округления! Для округления вниз используйте Math.floor.
freeneutron
15.12.2013, 17:08
Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.
Есть и другие особенности. Например в этой функции предусмотрен второй аргумент, что усложняет её использование в методе map для массива, нужно оборачивать.
Antonius
16.12.2013, 02:29
Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.
Почему? ParseInt предназначена для приведения строки к числу, в этой области применять ее можно свободно.
Для округления стоит использовать функции округления из Math, например.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot