Почему parseInt не работает с большим числом с ведущими 0?

avar = "0000013482000000";
t = parseInt(avar);

Когда я запускаю это, t по какой-то причине становится 92. Если я уберу ведущие 0, то все будет работать нормально. С чего бы это?


person Shamoon    schedule 30.04.2013    source источник


Ответы (4)


Попробуй это:

avar = "0000013482000000";
t = parseInt(avar,10);

Некоторые браузеры могут предположить, что это восьмеричное число, если строка начинается с 0.

Однако ,10 не требуется в современных браузерах с новыми стандартами ECMAScript, потому что они всегда будут считаться десятичными, если они не указаны или не начинаются с 0x (шестнадцатеричный).

введите здесь описание изображения

Chrome — один из тех браузеров, в котором система счисления по умолчанию равна 10.

Ссылка: Спецификация языка ECMAScript Страница 104

Функция parseInt создает целочисленное значение, определяемое интерпретацией содержимого строкового аргумента в соответствии с указанной системой счисления. Ведущий пробел в строке игнорируется. Если основание не определено или равно 0, предполагается, что оно равно 10, за исключением случаев, когда число начинается с пар символов 0x или 0X, и в этом случае предполагается основание, равное 16. Если основание равно 16, число также может необязательно начинаться с пар символов 0x или 0X.

person Derek 朕會功夫    schedule 30.04.2013
comment
Неверно в отношении ECMAScript 5. Если число начинается с 0x или 0X, оно считается основанием 16. - person Ian; 30.04.2013
comment
@Ian - Если он начинается с 0x, он считается указанным. - person Derek 朕會功夫; 30.04.2013
comment
Как указывается определенный формат строки в качестве второго параметра? - person Ian; 30.04.2013
comment
@Ian - я отредактировал свой ответ. - person Derek 朕會功夫; 30.04.2013
comment
Я знаю, что вы имели в виду, я просто указал на это для других людей :) - person Ian; 30.04.2013

Используйте второй параметр (основание):

t = parseInt(avar, 10);

Чтобы указать, что число должно быть проанализировано в базе 10.

Из документов MDN:

Если основание не определено или равно 0 (или отсутствует), JavaScript предполагает следующее:

  • Если входная строка начинается с «0x» или «0X», основание равно 16 (шестнадцатеричное), а оставшаяся часть строки анализируется.
  • Если входная строка начинается с «0», основание равно восьми (восьмеричное) или 10 (десятичное). Выбор системы счисления зависит от реализации. ECMAScript 5 указывает, что используется 10 (десятичное число), но пока это поддерживают не все браузеры. По этой причине всегда указывайте систему счисления при использовании parseInt.
  • Если входная строка начинается с любого другого значения, основание равно 10 (десятичное).

И в отношении ECMAScript 5:

Функция parseInt создает целочисленное значение, определяемое интерпретацией содержимого строкового аргумента в соответствии с указанной системой счисления. Ведущий пробел в строке игнорируется. Если основание не определено или равно 0, предполагается, что оно равно 10, за исключением случаев, когда число начинается с пар символов 0x или 0X, и в этом случае предполагается основание, равное 16. Если основание равно 16, число также может необязательно начинаться с пар символов 0x или 0X.

Ссылка:

person Ian    schedule 30.04.2013

Анализ числа с ведущими нулями приводит к тому, что число рассматривается как восьмеричное. Чтобы переопределить это, вам нужно установить параметр системы счисления parseInt равным 10 (основание 10, а не основание 8).

person Rick Viscomi    schedule 30.04.2013
comment
Почему за это проголосовали? - person Derek 朕會功夫; 30.04.2013
comment
Я думаю, что у меня есть тролль, который отрицает все, что я пишу;) - person Rick Viscomi; 30.04.2013

parseInt предполагает восьмеричное представление, если у вас есть начальный ноль, поэтому вы хотите передать radix в качестве второго параметра, говоря функции анализировать строку как основание 10 int.

parseInt(avar, 10) 

должен исправить это.

person coderzach    schedule 30.04.2013