Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   ParseInt и ParseFloat выдают разные числа. Почему? (http://www.flasher.ru/forum/showthread.php?t=146298)

gfdrf 03.11.2010 15:28

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

_string="00076543"
trace(parseInt(_string))
trace(parseFloat(_string))

трэйсы выдают:
32099
76543

mooncar 03.11.2010 15:32

Нужно облегчить парсеру parseInt задачу, указав основание:
Код AS1/AS2:

_string = "00076543";
trace(parseInt(_string, 10));
trace(parseFloat(_string));

Тогда все работает ожидаемо.

gfdrf 03.11.2010 15:35

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

mooncar 03.11.2010 15:38

Ага. Понимает по-своему.
Кто-нибудь даже может подсказать, как начинает работать parseInt в случае вашей строки, что выводит 32099.

gfdrf 03.11.2010 15:41

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

mooncar 03.11.2010 15:45

Ага.
Кстати, в 8-ричной он у вас посчитал:
Код AS1/AS2:

_string = "00076543";
trace(parseInt(_string, 8)); //32099
trace(parseInt(_string)); //32099

Парсер просек, что последняя цифра используемая 7, и взял за основание 8. Логично! :)

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

gfdrf 03.11.2010 16:24

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

Котяра 03.11.2010 16:29

0 перед знаковыми числами даёт основания считать что это 8-ричная система
Код AS1/AS2:

trace(parseInt("076543")); //32099
trace(parseInt("76543")); //76543
trace(parseInt("096543")); //96543

UPD хы, тут подсветка тоже по разному подсвечивает)

gfdrf 03.11.2010 16:51

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

Котяра 03.11.2010 16:58

Цитата:

Сообщение от gfdrf (Сообщение 947419)
Умный он оказывается :) Слишком...

Ну это просто так принято)
Код AS1/AS2:

trace(parseInt("010")); //8
trace(parseInt("0x10")); //16
trace(parseInt("10")); //10

Вставляйте явно основание.


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

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