Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Вниз

Поле округляется до четырех знаков   Найти похожие ветки 

 
Juice ©   (2007-02-07 12:35) [0]

Как правильно установить значение numeric-поля с точностью до пяти знаков после запятой?  Вот например есть таблица:

CREATE TABLE TEST (
   YIELD  SUMMA /* SUMMA = NUMERIC(15,5) default 0 */
);

Выполняем код:

sdsTest.Edit;
 sdsTest.FieldByName("yield").Value := 0.11223;
 sdsTest.Post;

В результате sdsTest.FieldByName("yield").Value = 0.1122.  
Но если руками через грид то пожалуйста, любое число с точностью до пяти знаков вносится в поле.


 
Juice ©   (2007-02-07 12:42) [1]

Тип поля при добавлении по умолчанию определяется как TFMTBCDField,

object sdsTestYIELD: TFMTBCDField
 FieldName = "YIELD"
 Precision = 15
 Size = 5
end



 
sniknik ©   (2007-02-07 12:55) [2]

> как TFMTBCDField
BCD в дельфе не реальный BCD, заменяется currency у которого только 4 знака под дробь...

замени тип поля на тип с плавающей запятой, TFloatField например. (у некоторых датасетов  есть параметр EnableBCD можно его выключить тогда автоматом будет заменен на с плавающей)


 
Juice ©   (2007-02-07 13:40) [3]

Как тогда понимать: The IDE uses two different field types for representing BCD fields: TFMTBCDField and TBCDField. TFMTBCDField uses a true BCD value (TBCD) to store and manipulate BCD values. This gives greater precision and accuracy than the Currency type used by TBCDField objects ...
Врут получается?


 
Juice ©   (2007-02-07 13:46) [4]

При открытии н.д. вываливает ошибку:Type mismatch for field "yield", expecting:Float actual :FMTBcdField
Поле заменил на такое:

object sdsTestyield: TFloatField
 FieldName = "yield"
end


 
sniknik ©   (2007-02-07 14:12) [5]

> Врут получается?
ну почему? для конкретного класса/поля может все и верно... но одним полем программа не ограничивается, а преобразования в разных местах идут через currency.
ты же тоже не явно данные в конкретном типе передаешь, имеют место неявные замены... а в замене вполне может встретится  
procedure TField.SetAsBCD(const Value: TBcd);
var
 Curr: Currency;
begin
 BcdToCurr(Value,Curr);
 SetAsCurrency(Curr);
end;
(TField это то что используется в твоем ([0]) примере)

по идее ты должен был написать, вместо
sdsTest.FieldByName("yield").Value := 0.11223;
это,  
sdsTestYIELD.AsBCD:= StrToBcd("0.11223"); //sdsTestYIELD это поле, что у тебя определилось типом TFMTBCDField, и перевод со строки т.к. вроде бы с float-а нету... есть со строк и с currency. (попробуй поискать)
вот тогда будет явное присвоение.


 
Anatoly Podgoretsky ©   (2007-02-08 19:19) [6]

> Juice  (07.02.2007 13:40:03)  [3]

> Врут получается?

Врут, а что именно?


 
Desdechado ©   (2007-02-08 20:57) [7]

Если мне не изменяет память:
1. BCD - binary compressed decimal, причем без указания точности, типа NUMERIC
2. FMTBCD - это formatted BCD, т.е. с указанием точности, типа NUMERIC(5,1)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.05 c
15-1175714119
Real
2007-04-04 23:15
2007.04.29
Мона Лиза - в MSPAINT.EXE за 2,5 часа


6-1162498390
Суслик
2006-11-02 23:13
2007.04.29
Про возможности INDY в области отсылки писем.


2-1176053929
Baffi
2007-04-08 21:38
2007.04.29
отчет в Excel


15-1175273508
Kolan
2007-03-30 20:51
2007.04.29
О нашел как паттерны типа Observer для Delphi сгенерить&#133


3-1170692540
s_t_d
2007-02-05 19:22
2007.04.29
MS SQL , BDE и драйвер ODBC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский