DBEdit与numeric(6,1)型字段关联,如何限制只能输入一个小数点,又如何限制只能输入一位小数位?

解决方案 »

  1.   

    限制只能输入一个小数点可以了,在KeyPress事件中:
    if key='.' then
      if pos('.',DBEdit1.Text)>0 then key:=#0;因为它要参与别的计算字段的计算,所以不能越界,要限制其输入位数
    但如何限制只能输入一位小数位,又如何限制其最多只能输入4位整数呢?
      

  2.   

    把连接这个DBEDI的字段的精度修改为1,那么输入的在多的小数后面的位数都会忽略
      

  3.   

    因数据库里其类型为numeric(6,1),输入后它会自动截断
    但是ADOQuery1.FieldByName('qty').Value的值仍是输入的值,因为该值要用于计算,所以会发生误差
      

  4.   

    既然是dbedit,可以控制相应的dataset中的字段格式,每一个字段都有editformat属性的
      

  5.   

    那你就在KEYPRESS里做限制了,输入的时候先POS一下现在的值,如果不能输入的话,
    就ABORT
      

  6.   

    假設與DBEdit綁定的字段名為﹕field1.
    table.fieldbyname('field1').EditFormat:=0.0
    table.fieldbyname('field1').DisplayFormat:=0.0
      

  7.   

    楼上的方法可以,但不是在输入时限制,而是在输入后限制,不过不失为一种好方法,建议楼主使用;
    在输入时限制,只有在ONKEYPRESS时编程控制了。
      

  8.   

    EditFormat、DisplayFormat我都设置为了0.0,可还是能输入多位小数,只不过离开时它自动四舍五入了。另外取ADOQuery1.FieldByName('qty').Value作为计算数据时,其值是输入时的值(多位小数)而不是四舍五入后的值。在计算的时候对输入的数字进行四舍五入当然可以,但毕竟是事后处理,感觉不爽。
    另对小数四舍五入函数roundto()的疑问,帮助里是这样的:
    RoundTo(1.234, -2) 1.23//正确
    RoundTo(1.235, -2) 1.24//正确
    RoundTo(1.245, -2) 1.24//为何不是1.25   ???
    我在程序中处理也是这样,四舍五入怎么把5也舍掉了???在输入时限制,只有在ONKEYPRESS时编程控制了。有该如何控制呢?在该事件中怎么知道当前输入的是哪一位?
      

  9.   

    RoundTo delphi5里怎么找不到?
      

  10.   

    简单方法,方一个掩码输入框,让他不显示,然后再dbedit的KeyPress中处理
    每次让掩码输入框的text=dbedit.text,然后在外面try一把!
    出错就是有问题,提示不能输入。
      

  11.   

    CoobiLiu(Coobi):在dbedit的KeyPress中如何处理?又如何在外面try一把?
      

  12.   

    RoundTo(1.245, -2) 1.24//为何不是1.25   ???计算机是用二进制存放数据的
    1.245——显示后可能就是1.244999999999999
      

  13.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      po:integer;
    begin
     po:=Pos('.',Edit1.Text);
     if ((po>0) and(po+1=length(Edit1.text))and (key<>#8))or((po>0)and (key='.')) then
       key:=#0;
    end;
      

  14.   

    四舍五入总有个原则吧,怎么有的舍、有的入:
    RoundTo(1.235, -2) 1.24//为何这个5会入
    RoundTo(1.245, -2) 1.24//为何这个5会舍
      

  15.   

    CoobiLiu(Coobi)的算法不注意效率。小小功能占那么多的时间空间。
      

  16.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      po:integer;
    begin
     po:=Pos('.',Edit1.Text);
     if ((po>0) and(po+1=length(Edit1.text))and (key<>#8))or((po>0)and (key='.')) then
       key:=#0;
    end;
      

  17.   

    限制输入的问题已经搞定了,现在是四舍五入的问题:
    RoundTo(1.235, -2) 1.24//为何这个5会入
    RoundTo(1.245, -2) 1.24//为何这个5会舍RoundTo函数是有的五会入有的五会舍,而我要实现的是真正的四舍五入,即1.245取两位小数要得到1.25而不是1.24,怎么办?