AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2006, 19:56   #1  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
? DWORD to FLOAT
Есть Binary значение размером 4 байта полученное из внешнего источника там это число с плавающей точкой, как в Аксапте его разшифровать?
Старый 05.09.2006, 09:03   #2  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от ivas
Есть Binary значение размером 4 байта полученное из внешнего источника там это число с плавающей точкой, как в Аксапте его разшифровать?
Что значит расшифровать? Если Вы получили значение типа Double, то:
X++:
Binary b = new Binary();

b.double();
Если нужно передать Double как параметр, то
X++:
ExtTypes::Double

Последний раз редактировалось Lucky13; 05.09.2006 в 09:57.
Старый 05.09.2006, 11:36   #3  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
С Double проблем нет прекрасно работает проблема именно с Float длинна 4 байта
Старый 05.09.2006, 11:44   #4  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
код:

PHP код:
        case (#SQL_FLOAT) :
            
axType  Types::Real;
            if (
set)
                
binaryValue.dword(0_value);
            else
            {
                
axValue binaryValue.dWord(0); // само собой не верно вопрос что тут писать :)
            
}
            break;
        case (
#SQL_DOUBLE) :
        
case (#SQL_D_FLOAT) :
            
axType  Types::Real;
            if (
set)
                
binaryValue.double(0_value);
            else
                
axValue binaryValue.double(0);
            break; 
Старый 05.09.2006, 14:08   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Посмотри класс COMVariant. У него есть свойство Float.

Чтобы сказать что-то более определенное надо знать как получаешь и как передаешь значение
Старый 05.09.2006, 14:50   #6  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Код:
    
     binary b = new binary(4);
     ;
     
     _record.binary(#DataOffset, b); // запись адреса b в другой binary: _record

      fetch.call(_record); // вызов функции которая заполняет _record
      //теперь в b лежит значение типа float 4 байта вот его то мне и нужно получить
Старый 05.09.2006, 14:56   #7  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от Владимир Максимов
Посмотри класс COMVariant. У него есть свойство Float.

Чтобы сказать что-то более определенное надо знать как получаешь и как передаешь значение
супер!
COMVariant спас
спасибо!
Старый 05.09.2006, 14:58   #8  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Код:
    COMVariant f = new COMVariant(COMVariantInOut::In, COMVariantType::VT_R4);
    ;
 
    f.long(b.dWord(0));
    axValue = f.float();
Старый 05.09.2006, 16:04   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
В качестве P.S. До кучи в коллекцию. В классе ССADOField метод value содержит шикарный шаблон switch почти на все случаи жизни.

Правда, конкретно Ваш float (VT_R4) упрятан в double, но подправить недолго.
Код:
anytype value()
{
    COMVariant  value;
    value = field.value();
 
    switch (value.variantType())
    {
        case COMVariantType::VT_I2:
            return value.byte();
 
        case COMVariantType::VT_I4:
            return value.int();
 
        case COMVariantType::VT_R4, COMVariantType::VT_R8:
            return value.double();
 
        case COMVariantType::VT_CY:
            return value.currency();
 
        case COMVariantType::VT_DATE:
            return value.date();
 
        case COMVariantType::VT_BSTR:
            return value.bStr();
 
        case COMVariantType::VT_BOOL:
            return value.boolean();
 
        case COMVariantType::VT_DECIMAL:
            return value.decimal();
 
        case COMVariantType::VT_I1:
            return value.byte();
 
        case COMVariantType::VT_UI1:
            return value.uInt();
 
        case COMVariantType::VT_UI2:
            return value.uShort();
 
        case COMVariantType::VT_UI4:
            return value.uLong();
    }
    return '';
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Внешнее приложение slava09 DAX: База знаний и проекты 2 24.10.2009 17:01
Базовые типы С++ Eldar9x DAX: Программирование 5 20.11.2006 16:29
ChangeDisplaySettings Link DAX: Программирование 6 06.11.2006 12:05
WinAPI. Ссылка (POINT) третьего уровня вложенности Владимир Максимов DAX: Программирование 2 06.02.2006 16:28
обертка к WinAPI PrintDlg simply2double DAX: Функционал 12 30.05.2005 17:30

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:48.