请问,我在修改一个用delphi5开发的程序时候,用Ttable控件做数据插入的时候出现了精度问题。
用如下方法操作:
    table1.fieldbyname('aa').value:=strToFloat(edt1.text); 
我在edt1.text输入123.12结果在数据库中保存的是123.11  如果输入的是123.16保存的是123.15
请问是什么问题?

解决方案 »

  1.   

    用formatfloat(‘###0.00’,edit1.text)
      

  2.   

    table1.fieldbyname('aa').asstring:=trim(edt1.text);
      

  3.   

    Table1.FieldByName('aa').AsString:=edt1.text; 然後在edt1的onkeypress下,限制只能輸入數值
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if not (Key in['0'..'9',#13,#8,'.']) then
       Key:=#0;
    end;
      

  4.   

    table1.fieldbyname('aa').AsCurrency:=StrToFloat(edit1.text);
      

  5.   

    用table1.fieldbyname('aa').asstring:=trim(edt1.text);也不行。
    table1.fieldbyname('aa').AsCurrency:=StrToFloat(edit1.text);也不行
    用formatfloat(‘###0.00’,edit1.text)也用过了
    开始我以为是没升级delphi 后来升级后也是不行。请大家想想是不是其他的
      

  6.   

    用下面的试试,应该可以
    table1.fieldbyname('aa').AsCurrency:=StrToCurr(edit1.text);
      

  7.   

    这样行不:table1.fieldbyname('aa').asFloat:=StrToFloat(edit1.text);
      

  8.   

    我试了一下, table1.fieldbyname('aa').asFloat:=StrToFloat(edit1.text);
    这样是没错的.
    你用什么数据库的,如果还不行的话可能是其它的问题,语句本身并没有错.
      

  9.   

    我用的是sql server 2000 个人版 字段的定义是 decimal(16,2)
      

  10.   

    把表字段类型设置为numeric(9, 2)试试!
    一般数值型字段设置为numeric比较好一些!
      

  11.   

    问题应该是delphi自己的问题,用ado就不会出现该问题了。
      

  12.   

    应该是float类型的问题吧
    比如 0.11 转换成float的时候可能会变成 0.109999999999999999999999
    但是你的数据库只允许两位小数,于是就截断了,只剩下 0.10了所以才会产生这个结果