Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.11.2010, 15:28
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 1  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
По умолчанию ParseInt и ParseFloat выдают разные числа. Почему?

Столькнулся с такой вот непонятной штукой.
Имеем строки вида "00012345"
Нужно выделить из неё число (целое конечно же) 12345
почему то parseInt() выдает что то непонятное вообще, а вот parseFloat() срабатывает как надо.
Проблемы нет, но интерес есть, почему так?
исходник не выкладываю, проверить просто:
Код AS1/AS2:
_string="00076543"
trace(parseInt(_string))
trace(parseFloat(_string))
трэйсы выдают:
32099
76543

Старый 03.11.2010, 15:32
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Нужно облегчить парсеру parseInt задачу, указав основание:
Код AS1/AS2:
_string = "00076543";
trace(parseInt(_string, 10));
trace(parseFloat(_string));
Тогда все работает ожидаемо.
__________________
Идите первым!


Последний раз редактировалось mooncar; 03.11.2010 в 15:34.
Старый 03.11.2010, 15:35
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 3  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
mooncar
Спасибо.
Но вроде бы это необязательный параметр?
Получается что без явного указания основания, он не понимает в какую систему переводить?

Старый 03.11.2010, 15:38
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ага. Понимает по-своему.
Кто-нибудь даже может подсказать, как начинает работать parseInt в случае вашей строки, что выводит 32099.
__________________
Идите первым!

Старый 03.11.2010, 15:41
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 5  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
Да нет, это уже неважно.
В принципе всё понятно. Наверное всёже безопаснее указывать необязательный параметр, чтоб гарантированно получить то, что ожидаешь.

Старый 03.11.2010, 15:45
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ага.
Кстати, в 8-ричной он у вас посчитал:
Код AS1/AS2:
_string = "00076543";
trace(parseInt(_string, 8)); //32099
trace(parseInt(_string)); //32099
Парсер просек, что последняя цифра используемая 7, и взял за основание 8. Логично!

Офтоп: это вроде как из автомобиля к гаишнику выходить не обязательно, но для достижения лучших результатов разговора все предпочитают это делать. И т. п.
__________________
Идите первым!


Последний раз редактировалось mooncar; 03.11.2010 в 15:47.
Старый 03.11.2010, 16:24
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 7  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
Ну вот эту цифру я написал для примера, но вообще он и без 7 выводит ерунду.
Не помню встречалась ли первая цифра больше 7, но правильного результата небыло ни разу

Старый 03.11.2010, 16:29
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
0 перед знаковыми числами даёт основания считать что это 8-ричная система
Код AS1/AS2:
trace(parseInt("076543")); //32099
trace(parseInt("76543")); //76543
trace(parseInt("096543")); //96543
UPD хы, тут подсветка тоже по разному подсвечивает)
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 03.11.2010 в 16:32.
Старый 03.11.2010, 16:51
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 9  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
Я так и понял что это из за нулей. Если их убрать, то конечно всё работает ожидаемо.
Но мне такие данные приходят, что делать.
Причем нельзя выкусить substring, ибо количество нулей непредсказуемо.
Можно конечно как то искать где начинается цифра и заканчиваются нули, но зачем делать кучу лишних операций, когда есть parseInt?
А он вон как...
Умный он оказывается Слишком...

Старый 03.11.2010, 16:58
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от gfdrf Посмотреть сообщение
Умный он оказывается Слишком...
Ну это просто так принято)
Код AS1/AS2:
trace(parseInt("010")); //8
trace(parseInt("0x10")); //16
trace(parseInt("10")); //10
Вставляйте явно основание.
__________________
Отряд Котовскага

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.