Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с дробными числами считанными из xml файла (http://www.flasher.ru/forum/showthread.php?t=190268)

SpetZ_Naz 22.12.2012 23:58

Работа с дробными числами считанными из xml файла
 
Доброго времени суток!

Порылся на форуме в поисках решения своей проблемки, но так и не нашел (или не понял) как решить свою задачу.

Задача простая: поиск по xml-базе по введенному значению в TextField. Суть проблемы в точности поиска из-за наличия дробных чисел.

Вот вырезка из xml'ки :

Код AS3:

<База>
 
<Настройки длина_разброс="3,2" ширина_разброс="2,5"> 1 </Настройки>
 
<Запись type="Тип" name="Название" длина="209,1" ширина="36,4">
        <p> Описание </p>
        <img> Адрес картинки </img>
</Запись>
 
<Запись type="Тип" name="Название_2" длина="154,1" ширина="20,4">
        <p> Описание </p>
        <img> Адрес картинки </img>
</Запись>
 
</База>

Действия в AS3 (загрузку, обработку событий и прочее не привожу):

Код AS3:

private var parInt:Number;
private var parInt_2:Number;
private var xmlbase:XML = new XML('base.xml');
 
....
// далее действия происходят в неком обработчике события нажатия на кнопку "поиск"
 
parInt = xmlbase..@длина_разброс;
parInt_2 = xmlbase..@ширина_разброс;
 
for each (var  xml:XMLList in xmlbase)
                                {
// проверяю попадает ли введенное в InputText значение в диапазон [длина-разброс ; длина + расброс]
                                        if ( ( parseInt(InputText_Length) >= (parseInt(xml..@длина)-parInt) ) &&
                                                (parseInt(InputText_Length) <= (parseInt(xml..@длина)+parInt) ) )
                                                {
                                  // аналогичную проверку провожу с шириной
                                                                if ((parseInt(InputText_Width) >= (parseInt(xml..@ширина)-parInt_2) ) &&
                                                                        ( parseInt(InputText_Width) <= (parseInt(xml..@ширина)+parInt_2))  )
                                                          {  // Вывод результата поиска
                                                          }
 
                                                } else { // Вывод сообщения о неудачном поиске
                                          }


Десятичные AS3 просто отрезает ( 3,2 => 3) или если в поля разброса записать 0,5, то записывает 0 и соответственно поиск работает не корректно:

Код AS3:

 
parInt = xmlbase..@длина_разброс;  // присваивает 3 вместо 3,2, а если 0,5, то присвоит 0
parInt_2 = xmlbase..@ширина_разброс; // присваивает 2 вместо 2,5
 
// parseInt(xmlbase..@длина_разброс) - аналогично считывает с округлением

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

Я вроде не работаю с сотыми, как например объясняли форумчанину с подобной проблемой в данной теме (но чувствую, что та же проблема).

Может кто объяснит человеческим языком почему так происходит и как заставить AS3 работать с дробью (для моего случая)?

maxkar 23.12.2012 00:18

У вас там запятая, а в AS3 при парсинге используется точка. Да и не только в AS, а практически во всех остальных языках тоже. Использование локальных символов формата (вроде запятой) в таком случае делается с использованием API локализации.

В общем, поменяйте запятую на точку в вашем XML.

Wolsh 23.12.2012 01:59

Потому что дробные числа и целые числа — два разных типа.
Соответственно использовать надо не parseInt(), a parseFloat().

SpetZ_Naz 23.12.2012 20:10

maxkar, Wolsh, спасибо за поправку, оба комментария уместны, учту на будущее.


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

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