德尔福是数字

non*_*one 21 delphi delphi-7

Delphi中是否有方法检查字符串是否为数字而不引发异常?

它用于int解析.

如果一个人使用,则会引发异常

try
  StrToInt(s);
except
  //exception handling
end;
Run Code Online (Sandbox Code Playgroud)

ba_*_*end 59

function TryStrToInt(const S:string; out Value:Integer):Boolean;

TryStrToInt将字符串S(表示十进制或十六进制表示法的整数类型编号)转换为数字,该数字分配给Value.如果S不表示有效数字,则TryStrToInt返回false; 否则TryStrToInt返回true.

要在输入字符串中接受十进制但不是十六进制值,可以使用如下代码:

function TryDecimalStrToInt( const S: string; out Value: Integer): Boolean;
begin
   result := ( pos( '$', S ) = 0 ) and TryStrToInt( S, Value );
end;
Run Code Online (Sandbox Code Playgroud)


da-*_*oft 24

var
  s: String;
  iValue, iCode: Integer;
...
val(s, iValue, iCode);
if iCode = 0 then
  ShowMessage('s has a number')
else
  ShowMessage('s has not a number');
Run Code Online (Sandbox Code Playgroud)

  • @Smasher @none`TryStrToInt`在D7中,以及它的朋友`TryStrToInt64`,`TryStrToBool`,`TryStrToFloat`,`TryStrToCurr`,`TryStrToDate`,`TryStrToTime`和`TryStrToDateTime`.在我看来OP已经接受了错误的答案. (9认同)
  • 您应该知道Val支持以0x或$开头的十六进制数字,这可能是您需要的,也可能不是.以下两行将'16'都放入'i'.Val('$ 10',i,c); Val('0x10',i,c); (6认同)
  • 该解决方案的优点是它也适用于实数.比"TryStrToInt"更难阅读的价格.它至少需要两个局部变量. (4认同)
  • @none:`TryStrToInt`应该在D7中可用.您之所以接受这个解决方案而不是由bassfriend发布的那个? (2认同)
  • 我不喜欢这个解决方案,因为它会给你一个不使用iValue的提示. (2认同)

Bha*_*rat 16

试试这个功能 StrToIntDef()

从帮助

将表示整数(十进制或十六进制表示法)的字符串转换为具有错误默认值的数字.

帕斯卡尔

function StrToIntDef(const S: string; Default: Integer): Integer;
Run Code Online (Sandbox Code Playgroud)

编辑

刚刚检查了TryStrToInt()Delphi 2007中的函数源.如果Delphi 7没有这个函数,你可以像这样写.它只是一个完美的代码,以达到轻柔的答案

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的选择**如果**有一个明显的默认值,实际上是有道理的.如果仅用于检查结果是否为-1(例如),则"TryStrToInt"更加健壮且可读. (4认同)

zaw*_*uza 7

XE4 及更新版本:

for ch in s do
   TCharacter.IsNumber(ch);
Run Code Online (Sandbox Code Playgroud)

不要忘记:

uses System.Character    
Run Code Online (Sandbox Code Playgroud)