Как разобрать строку с ведущим 0

Как разобратьInt "09" на 9?


person khelll    schedule 09.10.2009    source источник


Ответы (5)


включить основание:

parseInt("09", 10);
person Gabe Moothart    schedule 09.10.2009

Это сводило меня с ума -parseInt("02") работает, но не parseInt("09").

Как уже говорили другие, решение состоит в том, чтобы указать базу 10:

parseInt("09", 10);

Этому поведению можно найти хорошее объяснение здесь.

... В Javascript числа, начинающиеся с нуля, считаются восьмеричными, а в восьмеричном нет 08 или 09, отсюда и проблема.

person codeulike    schedule 08.06.2011

Вы также можете сделать:

Number('09') => 9

Это возвращает целое число 9 в IE7, IE8, FF3, FF4 и Chrome 10.

person Kieran Pilkington    schedule 17.01.2011

Повторно реализуйте существующий parseInt, чтобы при вызове с одним аргументом "10" автоматически включалось в качестве второго аргумента.

(function(){
  var oldParseInt = parseInt;
  parseInt = function(){
    if(arguments.length == 1)
    {
      return oldParseInt(arguments[0], 10);    
    }
    else
    {
      return oldParseInt.apply(this, arguments);
    }
  }
})();
person TDot    schedule 23.10.2012

parseInt("09",10);

возвращает 9 здесь.

Это странно.

alert(parseInt("09")); // shows 9. (tested with Opera 10)
person JCasso    schedule 09.10.2009
comment
@JonH: Верно. Спасибо за предупреждение. Поскольку он написал string вместо String, я ошибся. - person JCasso; 09.10.2009
comment
В зависимости от браузера и версии parseInt(09) может возвращать 0. Это ошибка. - person JonH; 09.10.2009
comment
@JonH: не могли бы вы проверить это: w3schools.com/jsref/jsref_parseInt.asp document.write(parseInt(010) также отображает здесь 10. - person JCasso; 09.10.2009
comment
@JonH: На самом деле это не ошибка. ECMAScript позволяет реализациям обрабатывать числа с ведущими нулями как восьмеричные. Некоторые реализации делают, а некоторые нет. - person Matthew Crumley; 09.10.2009
comment
@MatthewCrumley — старый комментарий, но какого черта — ES5 удаляет такое поведение, поэтому совместимые браузеры должны рассматривать parseInt('08') как основание 10. - person RobG; 14.09.2012