2015-03-17 3 views
5

Играла с JS и замечала это.parseInt() научная нотация

Почему parseInt(1e+21) возвращение 1 и parseInt(1e+20) возвращение 100000000000000000000? parseInt(10e+20) также возвращается 1?

Почему parseInt(1.7976931348623157E+10308); возвращение NaN пока parseFloat(1.7976931348623157E+10308)Infinity?


Даже сделал последовательность Фибоначчи и любое значение, которое имеет +21 экспонент возвращает только первую цифру:

fibonacci sequence scientific notation

parseFloat() возвращает правильное число до бесконечности.

Fibonacci demo (int : parseInt() : parseFloat())

(испытан в Chrome)

ответ

3

parseInt и parseFloat должны разобрать строки и конвертировать их в Number с. Итак, когда вы передаете им Number, он получает принудительную интерпретацию интерпретатором строки. Итак, по крайней мере в Firefox, "" + 1e+20 выходы "100000000000000000000" и "" + 1e+21 выходы "1e+21".

Давайте прочитаем the documentation из parseInt:

Если ParseInt обнаруживает символ, не являющийся цифрой в указанной системе счисления, она игнорирует его и все последующие символы и возвращает целочисленное значение, разобранное до этой точки

так parseInt("1.whatever") возвращает 1 и parseInt("32.231e+something") возвращает 32.

Похожая вещь должна быть happeni ng с parseFloat.

Это недостаток типичной печати. ИМО правильное поведение при выполнении того, что вы делаете, - это выбросить исключение.

+0

Почему parseInt (1e + 20) возвращает 100000000000000000000, а не 1? – rottenoats

+0

Я уже сказал это. Когда '1e + 20' принуждается к строке, он выводит' 100000000000000000000'', который получает синтаксический анализ на правильное число. '1e + 21' выдает' '1e + 21" 'вместо этого. Попробуйте «+» суммы, которые я написал в ответ. – rhaps0dy

+0

я сделал. parseInt ("" + 1e + 21) 1 – rottenoats

Смежные вопросы