![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о точности данных!
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 и диалект ?