Что выведет в консоль parseInt(0.0000003)

Описание

На собеседовании задали такой вопрос:

— Что выведет в консоль parseInt(0.000003)?
"Ну, ясное дело." — 0! .
— Хорошо. А что выведет parseInt(0.0000003)?
— А какая разница? 0!

Ответ убил:

— 3!

console.log(parseInt(0.0000003));

Почему?


Ответы (1 шт):

Автор решения: eccs0103

Для начала

Чтобы понять, как работает выражение, разберемся как работает parseInt.
Функция parseInt пытается разобрать целое число из СТРОКИ. Это ключевой момент.

Что происходит

Если передать не строковое значение как параметр, то произойдет автоматическая конвертация в строку, потом уже разбор. Если конвертировать число 0.000003 в строку, получим "0.000003".
Если конвертировать число 0.0000003 в строку, получим... "3e-7". ¯\_(ツ)_/¯

Вот тут нюанс

По разряду слишком большие (≥ 10²¹) или слишком маленькие (≤ 10⁻⁷) числа при конвертации в строку переходят в экспоненциальный вид для более удобного чтения.

console.log(`${10 ** 20}\n${10 ** 21}`);
console.log(`${10 ** -6}\n${10 ** -7}`);

При попытке разобрать "0.000003" в целое число, берется первая группа цифр, из которой можно получить целое число - 0.
При попытке разобрать "3e-7" - 3.

→ Ссылка