Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: parseInt('09')==0
 
 автор: mesos   (05.06.2007 в 17:44)   письмо автору
 
 

Проблема в следующем: есть всем известная функция parseInt(), в которую передаются различные строковые параметры. На выходе, естественно, ожидаются целые числа.
Но. Попробуйте посмотреть, что выведет parseInt('09') (или '08') в IE или в Firefox'e.
У меня, как ни странно, она выводит 0.
Собственно, проблема решилась заменой этой функции на parseFloat(), но все-же интересно, это глюк JS-движка или еще что-то?
Самое интересное, что такое происходит только для строк '08' и '09', т.е. передавая например '07', получаем ожидаемую 7.
Вот, предлагаю испытать этот тестовый пример:

<script type="text/javascript">
document.write('parseInt("07") = ' + parseInt('07'));
document.write('<br>');
document.write('parseInt("08") = ' + parseInt('08'));
document.write('<br>');
document.write('parseInt("09") = ' + parseInt('09'));
</script>

Я проверял:
Opera 9.1 - верно
Firefox 1.5 - неверно
IE 6.0 - неверно

   
 
 автор: bronenos   (05.06.2007 в 18:45)   письмо автору
 
   для: mesos   (05.06.2007 в 17:44)
 

опера рулит))

   
 
 автор: mesos   (05.06.2007 в 19:59)   письмо автору
 
   для: bronenos   (05.06.2007 в 18:45)
 

Хм, ну это все же спорный вопрос :)

В общем, порылся в Гугле и выяснил, что я не первый встретил эту проблему.
Это в принципе даже не ошибка, дело в том, что числа, начинающиеся с 0 браузер пытается интерпретировать как восьмеричные, а 08 и 09 в этой системе счисления не существуют.

Как вариант решения:

parseInt('09', 10);

десятка здесь жестко задает систему счисления.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования