通过一系列的计算,在Edit1.Text得出的数中有正有负,当是负是提示不允许,请教(20分)

  • 主题发起人 主题发起人 yedixifeng
  • 开始时间 开始时间
Y

yedixifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
通过一系列的计算,在Edit1.Text得出的数中有正有负,当是负是提示不允许,主要代码如下:

var
icount:integer;
begin
try
icount:=strtoint(trim(Edit1.Text));
except
begin
showmessage('出现负数,非法!');
exit;
end;
end;
但这代码不起作用,只对有小数有作用。
请问,如何修改?
 
var
iCount: Integer;
E: Integer;
begin
Val(Trim(Edit1.Text), iCount, E);
if E <> 0 then
ShowMessage('输入非法')
else
if iCount < 0 then ShowMessage('出现负数');
end;
 
0- 负数 > 0
0 - 正数 < 0
 
guanyue7613說的對阿,看他大不大於0就行了阿,干嗎要轉換整形,負整數用strtoint也不會報錯阿,正小數用strtoint不還是報錯
 
var
icount:integer;
begin
If Not TryStrToint(trim(Edit1.Text), icount) Then //不是int
Begin
showmessage('不是int!');
Exit;
End;
If (icount<0) Then
showmessage('出现负数')
Else
showmessage('ok');
 
你用的是StrToInt方法,是将字符串转为整数,这当然包括正数,负数和零了,但是不允许是小数,所以你的代码只能捕捉到小数的错误,而不能判断正负。
var
icount:integer;
begin
if not TryStrToInt(Trim(Edit1.Text), iCount) then begin
ShowMessage('出现小数,非法!');
Exit;
end;
if iCount < 0 then begin
ShowMessage('出现负数,非法!');
Exit;
end;
end;
 
在onkeypress限制输入字符
if not ((key in ['0'..'9']) or (key=chr(VK_BACK)) or (key=chr(vk_Delete))) then
key:=#0;
 
integer这个类型,本身就包含了正数、负数、零.所以当你的edit1.text中是负整数则不会执行except中的代码.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部