【问题标题】:How to check if a variable is an integer?如何检查变量是否为整数?
【发布时间】:2014-06-09 12:19:00
【问题描述】:

我正在使用 Inno Setup 并希望使用 Pascal 脚本检查字符串变量是否为整数(仅 0-9,无十六进制)。我做了这个函数:

function IsInt(s: string): boolean;
var
  i, len: Integer;
begin
  len := length(s);

  if len = 0 then
    result := false
  else
  begin
    result := true;
    for i := 1 to len do
    begin
      if not (s[i] in ['0'..'9']) then  !!! ERROR HERE !!!
      begin
        result := false;
        exit;
      end;
    end;
  end;
end; 

但是编译器报错:

Closing square bracket (']') expected.

如何解决?

如果我将这一行改为:

  if not (s[i] in ['0','1','2','3','4','5','6','7','8','9']) then

它符合但如果代码被执行它会给出这个错误:

Runtime Error - Invalid Type.

怎么办?

【问题讨论】:

  • 看起来您想检查 String 是否是 Number,而不是 Integer。我对吗?因为你不需要它在传递 HEX 数字时返回 True。

标签: inno-setup pascalscript


【解决方案1】:

您可以只做一个简单的范围测试,而不是使用集合,例如

IF (s[i] < '0') OR (s[i] > '9') THEN
   ...

【讨论】:

    【解决方案2】:

    来自 Pascal 脚本文档

    原型:函数StrToIntDef(s: string; def: Longint): Longint;

    说明:StrToInt函数将S中传入的字符串进行转换 成一个数。如果 S 不代表有效数字,则 StrToInt 返回 Def 中传入的数字。

    所以将def设置为-1,如果你的字符串不是数字,它将返回-1。

    【讨论】:

    • 谢谢,但这不是我需要的。只有从 0 到 9 的数字应该被接受为整数。 StrToIntDef 也接受 Hex:StrToIntDef('$1E', 0) 将给出 30。无论如何,该函数对于其他用例很有用。
    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 2013-10-14
    • 2011-01-12
    • 2014-01-25
    • 1970-01-01
    • 2016-08-22
    • 2013-01-16
    • 2011-03-30
    相关资源
    最近更新 更多