FPU как загнать число с плавающей точкой в буффер

Тема в разделе "WASM.WIN32", создана пользователем Ilgar, 21 мар 2007.

  1. Ilgar

    Ilgar New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    9
    invoke SQLFetch,hStmt
    test ax,ax
    jnz SQLFREEHANDLE

    invoke SQLGetData,hStmt,9,SQL_C_FLOAT,addr kol,sizeof kol,addr cbData
    mov lvi.imask,LVIF_TEXT
    inc lvi.iSubItem
    invoke wsprintf,addr szSQL,addr lpFlt,addr kol
    mov lvi.pszText,offset szSQL
    invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi

    Суть проблемы в том, что нужно используя ODBC получить доступ к базе MS ACCESS и вытащить оттуда информацию в приятном глазу виде. Все это я умею делать и делал не раз, но както не приходилось сталкиваться с типом "float". В куске кода видно, что с помощью функции SQLGetData я хочу из 9-го столбца вытащить значение типа "float" в переменную kol, а затем перевести в текстовый формат и отобразить в ListView. Переменные типа DWORD легко конвертируются с помощью функции wsprintf, но она не работает с плавающей точкой.
    Вопрос: как правильно объявить переменную типа "float" в асме (предположительно LOCAL kol:QWORD) и как правильно конвертировать в текстовый формат.
    Спасибо.
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Объявить: local f:real4

    Для конвертирования можешь использовать функцию из комплекта masm32lib - FloatToStr.
     
  3. Ilgar

    Ilgar New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    9
    Странный результат получается:
    invoke FloatToStr,kol,addr szSQL
    mov lvi.pszText,offset szSQL
    invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi

    Отображается следующее
    5.535529е-315 :)
     
  4. Ilgar

    Ilgar New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    9
    Странный результат получается:
    invoke FloatToStr,kol,addr szSQL
    mov lvi.pszText,offset szSQL
    invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi

    Отображается следующее
    5.535529е-315 :)
     
  5. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Ты уверен, что поле именно float? Когда говорят про float имеют ввиду короткий формат представления чисел с плавающей запятой, есть ещё длинный(8 байт) и расширенный(10 байт).
     
  6. Ilgar

    Ilgar New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    9
    В MS ACCESS это поле выглядит как "Двойное с плавающей точкой" возможно это doudle?
     
  7. Ilgar

    Ilgar New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2007
    Сообщения:
    9
    Спасибо всем кто ответил, рабочий ответ (кого интересует) следующий:

    LOCAL f:QWORD

    invoke SQLGetData,hStmt,9,SQL_C_DOUBLE,addr f,sizeof f,addr cbData
    mov lvi.imask,LVIF_TEXT
    inc lvi.iSubItem
    invoke FloatToStr,[f],addr szSQL