avar = "0000013482000000";
t = parseInt(avar);
Когда я запускаю это, t
по какой-то причине становится 92
. Если я уберу ведущие 0, то все будет работать нормально. С чего бы это?
avar = "0000013482000000";
t = parseInt(avar);
Когда я запускаю это, t
по какой-то причине становится 92
. Если я уберу ведущие 0, то все будет работать нормально. С чего бы это?
Попробуй это:
avar = "0000013482000000";
t = parseInt(avar,10);
Некоторые браузеры могут предположить, что это восьмеричное число, если строка начинается с 0
.
Однако ,10
не требуется в современных браузерах с новыми стандартами ECMAScript, потому что они всегда будут считаться десятичными, если они не указаны или не начинаются с 0x
(шестнадцатеричный).
Chrome — один из тех браузеров, в котором система счисления по умолчанию равна 10.
Ссылка: Спецификация языка ECMAScript Страница 104
Функция
parseInt
создает целочисленное значение, определяемое интерпретацией содержимого строкового аргумента в соответствии с указанной системой счисления. Ведущий пробел в строке игнорируется. Если основание не определено или равно 0, предполагается, что оно равно 10, за исключением случаев, когда число начинается с пар символов 0x или 0X, и в этом случае предполагается основание, равное 16. Если основание равно 16, число также может необязательно начинаться с пар символов 0x или 0X.
0x
или 0X
, оно считается основанием 16.
- person Ian; 30.04.2013
0x
, он считается указанным.
- person Derek 朕會功夫; 30.04.2013
Используйте второй параметр (основание):
t = parseInt(avar, 10);
Чтобы указать, что число должно быть проанализировано в базе 10.
Из документов MDN:
Если основание не определено или равно 0 (или отсутствует), JavaScript предполагает следующее:
И в отношении ECMAScript 5:
Функция parseInt создает целочисленное значение, определяемое интерпретацией содержимого строкового аргумента в соответствии с указанной системой счисления. Ведущий пробел в строке игнорируется. Если основание не определено или равно 0, предполагается, что оно равно 10, за исключением случаев, когда число начинается с пар символов 0x или 0X, и в этом случае предполагается основание, равное 16. Если основание равно 16, число также может необязательно начинаться с пар символов 0x или 0X.
Ссылка:
Анализ числа с ведущими нулями приводит к тому, что число рассматривается как восьмеричное. Чтобы переопределить это, вам нужно установить параметр системы счисления parseInt
равным 10 (основание 10, а не основание 8).
parseInt
предполагает восьмеричное представление, если у вас есть начальный ноль, поэтому вы хотите передать radix
в качестве второго параметра, говоря функции анализировать строку как основание 10 int.
parseInt(avar, 10)
должен исправить это.