Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.12.2013, 15:22
Аватар для freeneutron
Аспирант
Отправить личное сообщение для freeneutron Посмотреть профиль Найти все сообщения от freeneutron
 
Регистрация: 23.05.2012
Сообщений: 40

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

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

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

Последний раз редактировалось freeneutron, 15.12.2013 в 15:24.
Ответить с цитированием
  #2 (permalink)  
Старый 15.12.2013, 16:33
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Дело в том, что функция parseInt не предназначена для округления чисел, а считывает целое число из строки, как и говорит название функции. Но многие этого не знают и используют её не по назначению. Да, она работает именно со строками! В данном случае аргументы преобразуются в строки "0.000001" и "1e-7".
Хочется крикнуть на весь мир: никогда не используйте parseInt для округления! Для округления вниз используйте Math.floor.
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2013, 17:08
Аватар для freeneutron
Аспирант
Отправить личное сообщение для freeneutron Посмотреть профиль Найти все сообщения от freeneutron
 
Регистрация: 23.05.2012
Сообщений: 40

Спасибо за разъяснение. Жаль конечно, но это существенно сужает область применения parseInt.
Ответить с цитированием
  #4 (permalink)  
Старый 15.12.2013, 17:23
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Есть и другие особенности. Например в этой функции предусмотрен второй аргумент, что усложняет её использование в методе map для массива, нужно оборачивать.
Ответить с цитированием
  #5 (permalink)  
Старый 16.12.2013, 02:29
Аспирант
Отправить личное сообщение для Antonius Посмотреть профиль Найти все сообщения от Antonius
 
Регистрация: 30.11.2013
Сообщений: 42

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
9-ти разрядная матрица Mersedes! Ваши сайты и скрипты 4 09.08.2012 14:17
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 17:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21