Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк - parseInt(), parseInt ??? 
:(
    Опции темы
t77
Дата 27.8.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Доброе время суток. 
Код

for(var i=0; i<10; i++)
{
     alert(parseInt('i'));
}

Если взять числа от 1 до 9 и просто выводить их на экран с помощью alert с использованием parseInt, то можно наблюдать странную штуку. Дело в том, что при alert(parseInt('8'))выводиться НОЛЬ вместо восьмерки. То же самое и с числом 9. Все остальные числа выводятся нормально. Объясните мне пожалуйста почему? Почему именно 8 и 9 ? Решение данной проблеме нашел, использовав в функции ПАРСИНТ второй параметр 10. Тоесть parseInt('8',10). И тогда все нормально. Но почему без явном указании единицы исчисления все числа выводятся нормально за исключением 8 и 9 ?
PM MAIL   Вверх
azesmcar
Дата 27.8.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



t77

ничего что parseInt('i') пытается символ i к int привести?
а alert(parseInt('8')) выведет 8, как и ожидается.
PM   Вверх
Michael.de
Дата 27.8.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 4
Всего: 9



t77, в твоём примере alert() выдаёт сплошные NaN - кавычки там не нужны smile
PM MAIL   Вверх
t77
Дата 27.8.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Попробуйте следующий код:
Код

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script>
        function myFunc()
        {
            for(var i=0; i<10; i++)
            {
                alert(parseInt("0"+i));
            }

        }
    </script>
</head>
<body onload="myFunc()">
    
</body>
</html>

PM MAIL   Вверх
azesmcar
Дата 27.8.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



а причем тут тогда предыдущий код?
Открою страшную тайну... 010 - это число в octal число (в 8-ичном виде). 

http://www.w3schools.com/jsref/jsref_parseInt.asp
тут можешь посмотреть документацию по функции parseInt.

а исправить можешь так
Код

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script>
        function myFunc()
        {
            for(var i=0; i<10; i++)
            {
                alert(parseInt("0" + i, 10));
            }
        }
    </script>
</head>
<body onload="myFunc()">
    
</body>
</html>

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

Это сообщение отредактировал(а) azesmcar - 27.8.2009, 15:22
PM   Вверх
t77
Дата 27.8.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Цитата

а причем тут тогда предыдущий код?

В предыдущем коде забыл прикрепить нолик в начале каждого из чисел.

Цитата

Открою страшную тайну... 010 - это число в octal число (в 8-ичном виде). 

 smile 
Это не тайна и тем более не страшная.
Понятно, что можно задать с помощью второго параметра систему исчисления...Я об этом говорил в самом начале. 
Вопрос был поставлен НЕ как решить задачу.
Я спросил, почему НЕ ЗАДАВ второй параметр(Decimal, Hexadecimal,Octal), все числа отображаются правильно, за исключением 8 и 9 ?
PM MAIL   Вверх
azesmcar
Дата 27.8.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



Цитата(t77 @  27.8.2009,  15:43 Найти цитируемый пост)

Это не тайна и тем более не страшная.
Понятно, что можно задать с помощью второго параметра систему исчисления...Я об этом говорил в самом начале. 
Вопрос был поставлен НЕ как решить задачу.
Я спросил, почему НЕ ЗАДАВ второй параметр(Decimal, Hexadecimal,Octal), все числа отображаются правильно, за исключением 8 и 9 ? 

 smile 
я думал это и так понятно. Потому что чисел 8 и 9 в восьмеричной системе счисления нету.

Это сообщение отредактировал(а) azesmcar - 27.8.2009, 15:49
PM   Вверх
t77
Дата 27.8.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



ОППА! smile  А с этого места пожалуйста подробнее... Это как нету?

Добавлено через 1 минуту и 34 секунды
И вообще, причем тут восмеричная система?

Добавлено через 4 минуты и 1 секунду
Я же НЕ указываю второй параметр ПАРСИНТ. По умолчанию он должен считать по десятичной системе.
PM MAIL   Вверх
azesmcar
Дата 27.8.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



Цитата(t77 @  27.8.2009,  15:51 Найти цитируемый пост)
ОППА! smile  А с этого места пожалуйста подробнее... Это как нету?

что такое восьмеричная система знаешь?
Вот тут написано
http://ru.wikipedia.org/wiki/%D0%92%D0%BE%...%BD%D0%B8%D1%8F

приведу пример на двоичной, она состоит из нулей и единиц, число 2, 3, 4, 5... там не используются, попросту цифры 25 в двоичной системе счисления быть не может, 25 в двоичной выглядет так 11001. А в восьмеричной нет чисел 8 и 9, только 0, 1, 2, 3, 4, 5, 6, 7.


Цитата(t77 @  27.8.2009,  15:51 Найти цитируемый пост)
И вообще, причем тут восмеричная система? 


Цитата(azesmcar @  27.8.2009,  15:20 Найти цитируемый пост)
тут можешь посмотреть документацию по функции parseInt.


Цитата(azesmcar @  27.8.2009,  15:20 Найти цитируемый пост)
010 - это число в octal число (в 8-ичном виде). 


Подробнее ..если перед числом поставить знак 0, это воспринимается как указание на то, что число представлено в восьмеричной системе счисления.
PM   Вверх
bars80080
Дата 27.8.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



t77, если вы пишете число с нулём впереди, то подразумевается, что вы пишете восьмиричное число.
тоже самое, что и 0х для шестнадцеричного

я вообще-то думал, что это общее математическое правило для языков программирования. во всяком случае оно работает и в js, и в php


зачем вы вообще стали приписывать ноль вперёд? случайно это не получится
PM MAIL WWW   Вверх
azesmcar
Дата 27.8.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



Цитата(t77 @  27.8.2009,  15:51 Найти цитируемый пост)
Я же НЕ указываю второй параметр ПАРСИНТ. По умолчанию он должен считать по десятичной системе. 

Кто так решил? Я ведь ссылку на документацию не просто так прислал...
Цитата

The radix parameter is used to specify which numeral system to be used, for example, a radix of 16 (hexadecimal) indicates that the number in the string should be parsed from a hexadecimal number to a decimal number.

If the radix parameter is omitted, JavaScript assumes the following:

    * If the string begins with "0x", the radix is 16 (hexadecimal)
    * If the string begins with "0", the radix is 8 (octal). This feature is deprecated
    * If the string begins with any other value, the radix is 10 (decimal)



Это сообщение отредактировал(а) azesmcar - 27.8.2009, 16:04
PM   Вверх
t77
Дата 27.8.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Вы правы!Все ясно! Спасибо большое smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.