问题(100分)

  • 主题发起人 主题发起人 wbing
  • 开始时间 开始时间
W

wbing

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位:
我用 if (StrToInt(s)>=0) and(StrToInt(s)<=9) then来判断输入的变量是不是数字,
可是当输入字符时却报错,达不到检测的效果,请问怎么解决?
 
if not s in ['0'..'9'] then
.....
 
try
if (StrToInt(s)>=0) and (StrToInt(s)<=9) then ...
showmessage('转入的是数字');
except
showmessage('为什么不输入数字');
end;
 
if s in ['0'..'9'] then
 
你要读入的变量一定是一个字符吗
如果是的话
可以这样
if ord(s[1])<48 or ord(s[1])<57
then shoemessage('你输入的不是数字')
else shoemessage('你输入的是数字')
 
最好不要用这种方法来判断字符是否数字,
最好直接判断字符的Ascii码值是否在‘0’、‘9’码值之间。
用集合也可以判断,不过速度较慢。
 
result := true;
try
StrToInt(s);
except
//不是
result := false;
end;
 
if s in ['0'..'9'] then
好一点,StrToInt(s);时字母E和XA、XB、XC、XD、XE等许多都可以通过不报错,
无法达到目的
 
如果你只是要判断是不是整形
可以用
function IsInteger(Str: string): Boolean;
var
V, Code: Integer;
begin
Val(Str, V, Code);
Result := Code = 0;
end;
判断是否浮点形
function IsFloat(Str: string): Boolean;
var
Value: Extended;
begin
Result := TextToFloat(PChar(Str), Value, fvExtended);
end;
 
// Val(Str, V, Code);
// Result := Code = 0;
呵呵,现在会用 Val 函数的人很少了,TurboPascal 里面带来的东西,
真不愧您的名字。
真是怀念当初用 TP 的岁月:)
 
if (StrToInt(s)>=0) and(StrToInt(s)<=9) then
从键盘输入的值都被作为ASC字符,输入的数字是作为字符进去,用StrToInt(s)可以转化
为相应的数字,但原本是字符ASC进来后当然无法用StrToInt(s)转化了,而且会抱错。
为河不用if key in ['0'..'9'] then,直接判断键值。

 
['0'..'9','#8']别忘了Backup键否则没法退格
 

Similar threads

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