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;
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;
if key='.' then
if pos('.',DBEdit1.Text)>0 then key:=#0;因为它要参与别的计算字段的计算,所以不能越界,要限制其输入位数
但如何限制只能输入一位小数位,又如何限制其最多只能输入4位整数呢?
但是ADOQuery1.FieldByName('qty').Value的值仍是输入的值,因为该值要用于计算,所以会发生误差
就ABORT
table.fieldbyname('field1').EditFormat:=0.0
table.fieldbyname('field1').DisplayFormat:=0.0
在输入时限制,只有在ONKEYPRESS时编程控制了。
另对小数四舍五入函数roundto()的疑问,帮助里是这样的:
RoundTo(1.234, -2) 1.23//正确
RoundTo(1.235, -2) 1.24//正确
RoundTo(1.245, -2) 1.24//为何不是1.25 ???
我在程序中处理也是这样,四舍五入怎么把5也舍掉了???在输入时限制,只有在ONKEYPRESS时编程控制了。有该如何控制呢?在该事件中怎么知道当前输入的是哪一位?
每次让掩码输入框的text=dbedit.text,然后在外面try一把!
出错就是有问题,提示不能输入。
1.245——显示后可能就是1.244999999999999
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;
RoundTo(1.235, -2) 1.24//为何这个5会入
RoundTo(1.245, -2) 1.24//为何这个5会舍
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;
RoundTo(1.235, -2) 1.24//为何这个5会入
RoundTo(1.245, -2) 1.24//为何这个5会舍RoundTo函数是有的五会入有的五会舍,而我要实现的是真正的四舍五入,即1.245取两位小数要得到1.25而不是1.24,怎么办?