表中的OnCalculate字段产生的数字太长

时间:2014-03-25 03:13:18

标签: delphi

我在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位数字。

enter image description here

我想显示一个只有两位小数的数字,如5,81。 我可以通过将字段的属性设置为CalcEdit并将Precision设置为3来在cxGrid中执行此操作。 但我想知道这可以在代码中完成。

我有办法实现这个目标吗?

2 个答案:

答案 0 :(得分:4)

314/54井是5.814814814814 ....如果您使用的是持久字段,则可以将DisplayFormat设置为',0.00 ;; '

或代码:

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;

我还没有机会对此进行测试,但基本思路将是这样的。