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

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

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

Регистрация: Aug 2012
Сообщений: 77
Question Работа с дробными числами считанными из 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 работать с дробью (для моего случая)?
__________________
Набирать программы могут многие, программировать - единицы

Старый 23.12.2012, 00:18
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

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

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

Старый 23.12.2012, 01:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Потому что дробные числа и целые числа — два разных типа.
Соответственно использовать надо не parseInt(), a parseFloat().
__________________
Reality.getBounds(this);

Старый 23.12.2012, 20:10
SpetZ_Naz вне форума Посмотреть профиль Отправить личное сообщение для SpetZ_Naz Найти все сообщения от SpetZ_Naz
  № 4  
Ответить с цитированием
SpetZ_Naz

Регистрация: Aug 2012
Сообщений: 77
maxkar, Wolsh, спасибо за поправку, оба комментария уместны, учту на будущее.
__________________
Набирать программы могут многие, программировать - единицы

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

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

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


 


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


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