У меня есть TDBEdit
, подключенный к TFloatField
, который имеет DisplayFormat = '0.################'
.Я установил значение поля на 12.123456789
и заметил, что мой элемент управления редактирования отображает его как '12,1234567890000005'
.
НадеюсьУ меня нет глубоких знаний о числах с плавающей запятой, но я знаю, что это происходит потому, что числа с плавающей запятой аппроксимируются.
Во всяком случае, мне интересно, как я могу убедиться, что дополнительные десятичные числа никогда не будут "волшебным образом" появляться после того, как пользователь введет значение?
Я думал сократить строку DisplayFormat
, удаливодин '#'
, но я не знаю, будет ли этого достаточно, чтобы избежать проблемы в любом состоянии.
Пример:
uses
DBClient, DB, DBCtrls;
...
var
Dst : TClientDataSet;
Dsc : TDataSource;
Fld : TFloatField;
Edit : TDBEdit;
begin
//components creation
Dst := TClientDataSet.Create(Application);
Dst.FieldDefs.Add('TEST', ftFloat, 0, False);
Dst.CreateDataSet();
Fld := Dst.Fields[0] as TFloatField;
Fld.DisplayFormat := '0.################';
Dsc := TDataSource.Create(Application);
Dsc.DataSet := Dst;
Edit := TDBEdit.Create(Application);
Edit.DataSource := Dsc;
Edit.DataField := Fld.FieldName;
Edit.Align := alTop;
Edit.Parent := Self;
//test
Dst.Open();
Dst.Append();
Fld.AsFloat := 12.123456789;
Dst.Post();