Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о точности данных!


RavenD ©   (2004-02-16 10:47:00) 

Привет, All!

ситуация:
в БД (Paradox, InterBase) поля типа BCD c 6-ю знаками после запятой, в алиасе строка ENABLE BCD стоит в True

проблема:
к таблице обращаюсь через TTable
Table1.FieldByName('Rate').AsFloat
приходяжие значения округляются до 4 знаков после запятой -> точность теряется, подскажиет как настроить точность обрабатываемых данных

Спасибо.


Zacho   (2004-02-19 10:26:00) [1]


> RavenD   (19.02.04 10:12) [9]

IBX - входит в поставку Дельфи начиная с Д5. FIBPlus, IBO - отдельные и платные. Есть и еще менее распространенные. В общем, выбирай по потребностям и по возможностям. А использовать сейчас для работы BDE с IB - не стоит.
И еще - тебе прямая дорога на http://www.ibase.ru:)


Anatoly Podgoretsky   (2004-02-19 10:19:00) [2]

Да и еще про BCD - в dBase 4 была подлинная поддержка, но после того как Борланд купил ее, он уничтожил эту поддержку и стал делать внутреннею обработку через Float


Anatoly Podgoretsky   (2004-02-19 10:18:00) [3]

RavenD   (16.02.04 10:47)  
В Парадоксе нет BCD с 6 знаками, только с четырьмя и ежто единственный BCD который там есть. Остальные это Float и маска для отображения. Подлинные BCD есть в xBase, но это все равно не относится к обработке в Дельфи и бругих Борландовских продуктах.
В Интребейс в 3 диалекте, что то появилось

RavenD   (17.02.04 12:17) [6]
Не позволяет, но какая то поддержка появилась в версии 6, какая точно не иследовал, у меня Д5 рабочая лошадка.


RavenD   (2004-02-19 10:12:00) [4]

>Romkin
"компоненты прямого доступа" - подробней можно, о чём речь?


Romkin   (2004-02-17 12:39:00) [5]

Ограничение на 4 знака - баг BDE. ТАм в currency преобразуют, унутрях. Используй компоненты прямого доступа. Кстати, при enabled BCD на первом диалекте еще и отсечение вместо округления было


Guest   (2004-02-17 12:34:00) [6]

Я использую TBCDField и TFMTBCDField, которые AsString возвращают данные без искажений.


RavenD   (2004-02-17 12:17:00) [7]

>KADAN
неужто Дельфя не позволяет работать с большим количеством символов после запятой без извращений?

народ неужто предлагаемые выше способы единственно возможные?

Спасибо.


KADAN   (2004-02-17 08:13:00) [8]

Можно сделать строковое поле длиной скажем 20 и записывать в него float'ы, но тогда придется программно следить за правильностью ввода. код
 table1.First;
 a:=table1.fieldbyname('Fl').AsFloat;
 s:=table1.fieldbyname('Fl').AsString;
 table1.Last;
 b:=table1.fieldbyname('Fl').AsFloat;
 s:=s+'+'+table1.fieldbyname('Fl').AsString+'=';
 s:=s+floattostrf(a+b,ffFixed,20,6);
 showmessage(s);

идет на ура.


RavenD   (2004-02-16 14:16:00) [9]

>Zacho
NUMERIC(15,6)
FireBird
dialect 3

>KADAN
подскажите тогда способ как обрабатывать числа содержащие больше 4 знаков после запятой

Спасибо


KADAN   (2004-02-16 11:25:00) [10]

В BCD ограничения Digits 20, precision 4

imits the precision of the BCD values it can support to 4 decimal places and 20 significant digits


Семен Сорокин   (2004-02-16 10:55:00) [11]

может можно поменять тип поля вручную:
Table1.FieldByName('Rate').SetFieldType(ftFloat);


Zacho   (2004-02-16 10:52:00) [12]

В IB нет типа данных BCD. Есть DECIMAL, NUMERIC, DOUBLE PRECISION. Какой именно тип у тебя ? И какая версия IB и диалект ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо