Главная страница
    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.47 MB
Время: 0.046 c
2-1176065515
Officeman
2007-04-09 00:51
2007.04.29
TLIstView selected


2-1176006783
Roman_S
2007-04-08 08:33
2007.04.29
Что выбрать: mail, ICQ, SMS, Socket…?


4-1164724592
Виктор1
2006-11-28 17:36
2007.04.29
Нажать на элемент чужой TPopupMenu


1-1172743566
linox
2007-03-01 13:06
2007.04.29
к текущему времени добавить число


2-1176275300
jeen
2007-04-11 11:08
2007.04.29
Как распечатать содержимое фрейма ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский