我做的一个Query需两个Number型的字段相减,结果放在dbgrid中,但是显示出来的结果却有很多位小数,因为Query是动态生成的,所以不能事先设定其小数位数,请问怎样使它只保存两位小数?

解决方案 »

  1.   

    双击Query选定你要保留两位小数的那个Column,在EditFormat中设置。
      

  2.   

    计算字段应该可以使用Round函数来达到你的要求
      

  3.   

    yzykjh:我的Query是动态生成的,所以不能事先设定其小数位数
    chao_jian:用round不是将其转换为整数了吗,我要的是两位小数。
      

  4.   

    动态生成QUERY,难道就不能动态设置其属性吗?
      

  5.   

    你尝试把相应的字段或变量定义为Currency类型.
    我以前在用VB的时候同样碰到过这样的问题.
    如12.45+0.04,我再Round之后居然会变为12.50(而实际上应该是12.49). 
    但定义为Currency类型之后就非常精确了.
      

  6.   

    我查了数据库表中只能定义number型及integer,不能定义currency类型,除开此法,请问各位还有什么办法吗?
      

  7.   

    '动态生成QUERY,难道就不能动态设置其属性吗?'确实不能动态设置.如果程序Query的选择语句是select * ..(选择所有的字段)
    可以用下面比较笨一点的方法:1)在Query的Sql属性中添加 select * from table
    2)Activite属性设为true
    3)双击Query控件,添加所有字段
    4)把要显示的字段的DisplayFormat属性写:'#.##'
      

  8.   

    我之所以做动态query的原因就是我每次调用query时设置的sql语句不完全一样,特别是查出来的字段的方式不一样,有的作相加,有的相减,有的求平均值等,所以不能事先做好,请问各位还有什么办法没有?
      

  9.   

    procedure TFrmColligate.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
      var
      arect :TRect ;
    begin
      Case DataCol of
      3,4,5,6,7:
        if Length(adoquery2.Fields[DataCol].AsString) <= 0 then
        begin
          ARect := Rect ;
          ARect.Right := ARect.Right - 3 ;
          DrawText(DBGrid1.Canvas.Handle,'0',-1,Arect,DT_SINGLELINE or DT_RIGHT or DT_VCENTER) ;
        end ;
      end;
    end;
    这是自动填充0的过程,你在这里做相应的判断和修改应该能达到你的目的。
      

  10.   

    在事件beforeopen中加入你的转换代码
      

  11.   

    我记得dbgrid有一个cell的属性,不过我没试过。
      

  12.   

    这样写:select fnum = cast(num1-num2 as numeric(18,2)) from ....
      

  13.   

    format('%.2f',[e])
    e是float 返回的是string
      

  14.   

    在delphi里可以用format函数
    在ms-sql 中可以用to_char函数