我在SQLite中有这样一个表:
CREATE TABLE [TABLE1] (
[T_ID] INTEGER PRIMARY KEY ON CONFLICT IGNORE AUTOINCREMENT,
[DATE] DATE UNIQUE ON CONFLICT IGNORE,
[FIELD1] INTEGER,
[FIELD2] INTEGER,
[FIELD3] INTEGER,
[FIELD4] REAL);
我在TABLE1中添加了2个新的计算字段 称为SUM1(整数)和SUM2(浮点)。
procedure TForm3.UniTable1CalcFields(DataSet: TDataSet);
begin
UNITable1.Fields.FieldByName('SUM1').asInteger := (UNITable1.Fields.FieldByName('FIELD1').AsInteger) + (UNITable1.Fields.FieldByName('FIELD2').AsInteger) + (UNITable1.Fields.FieldByName('FIELD3').AsInteger);
UNITable1.Fields.FieldByName('SUM2').asFloat := (UNITable1.Fields.FieldByName('SUM1').AsInteger) / (UNITable1.Fields.FieldByName('FIELD4').AsInteger) ;
end;
这种作品,但我遇到麻烦,而SUM2显示一个15位数字。
我想显示一个只有两位小数的数字,如5,81。 我可以通过将字段的属性设置为CalcEdit并将Precision设置为3来在cxGrid中执行此操作。 但我想知道这可以在代码中完成。
我有办法实现这个目标吗?
答案 0 :(得分:4)
或代码:
TNumericField(UNITable1.Fields.FieldByName('SUM2')).DisplayFormat := ',0.00;; ';
答案 1 :(得分:0)
另一种选择是使用FormatFloat('0.00',myvariable)
功能。
' 0.00'定义格式(2位小数),myvariable是一个恰当命名的变量。
唯一的缺点是它需要额外的几行代码来声明并为变量赋值,如果你想使用这个值进行进一步的计算,精度将低于原来的浮点数你了。
procedure TForm3.UniTable1CalcFields(DataSet: TDataSet);
var
var1: real;
begin
//Assign the floating point value to the variable
var1 := (UNITable1.Fields.FieldByName('SUM1').AsInteger) / (UNITable1.Fields.FieldByName('FIELD4').AsInteger);
UNITable1.Fields.FieldByName('SUM1').asInteger := UNITable1.Fields.FieldByName('FIELD1').AsInteger) + (UNITable1.Fields.FieldByName('FIELD2').AsInteger) + (UNITable1.Fields.FieldByName('FIELD3').AsInteger);
UNITable1.Fields.FieldByName('SUM2').AsFloat := FormatFloat('0.00',var1);
end;
我还没有机会对此进行测试,但基本思路将是这样的。