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