VBScript:检查用户输入是否为整数

时间:2009-10-07 14:50:17

标签: vbscript

在VBScript中,我需要确保用户输入一个整数。

以下是我现在所拥有的:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CLng(Number) Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End if

问题是CLng()不会测试我的数字是否为整数:无论如何都要转换数字。

有没有办法检查数字是否为整数?

编辑:

建议的答案对我来说不起作用。这是我的代码的新版本:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
   ' Here, it still could be an integer or a floating point number
   If Number = CLng(Number) Then
      WScript.Echo "Integer"
   Else
      WScript.Echo "Not an integer"
   End If
End if

这是输出:

U:\>cscript //nologo test.vbs
Enter an integer number :
12
Not an integer

U:\>cscript //nologo test.vbs
Enter an integer number :
3.45
Not an integer

7 个答案:

答案 0 :(得分:15)

这实际上有效:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CStr(CLng(Number)) = Number Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End If

以前,问题在于您正在比较字符串与永远不会评估为true的整数。

现在,你取一个字符串,检查它是否为数字,将其转换为CLng(),它只返回数字的整数部分,将其转换回字符串,最后将其与原始字符串进行比较。

如果输入...“asdasD”(或任何其他非数字的东西),它不会传递“isNumeric”检查。

如果在转换为CLng()时输入“10.5”(作为字符串),则在获得10时转换为“10”并与“10.5”进行比较。由于字符串不匹配,它表示它不是整数。

如果你输入“10”转换为CLng()它是10,返回字符串它是“10”,当它与“10”匹配时返回true,这意味着它是一个整数。

我知道几年太晚了,但我现在正在调查这个问题,并对此感到困惑。希望它可以帮助其他人像我一样在周围徘徊。

答案 1 :(得分:13)

这与您的代码非常相似:

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be an integer or a floating point number
    If CLng(Number) = Number Then
       WScript.Echo "Integer"
    Else
       WScript.Echo "Not an integer"
    End If
End If

答案 2 :(得分:3)

如果您这样做,它应该有效:

如果Number = CInt(Number)则

答案 3 :(得分:2)

上面的cogumel的回答几乎得到了它,但奇怪的是我失败了。我发现它会在" 5" (在引号中),但不是5(没有引号)。在进行最终比较时,您还需要将原始输入转换为字符串,以使其全部可靠地工作。它包含在一个简洁的功能中:

public function is_integer( input )
    is_integer = false
    If IsNumeric(input) Then
        If CStr(CLng(input)) = CStr(input) Then is_integer = true
    End If
end function

我还使用零(真),负整数(真)来测试它,无论是引号还是引号外。

答案 4 :(得分:0)

我发现这个简单的程序可以验证来自http://rindovincent.blogspot.com/p/vbscript-programs.html的数值,并且在允许的情况下我会粘贴相同的数值。我希望它对像我这样的初学者有用

<HTML>
<HEAD><TITLE>Simple Validation</TITLE>
<SCRIPT LANGUAGE="VBScript"> 
<!--
Sub Submit_OnClick
  Dim TheForm
  Set TheForm = Document.ValidForm
  If IsNumeric(TheForm.Text1.Value) Then
    If TheForm.Text1.Value < 18 Or TheForm.Text1.Value > 40 Then
      MsgBox "Age must be above 18"
    Else
      MsgBox "Thank You"
    End If
  Else
    MsgBox "Please enter a numeric value"
  End If
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>Simple Validation</H3><HR>
<FORM NAME="ValidForm">
Enter your age: 
<INPUT NAME="Text1" TYPE="TEXT" SIZE="2">
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="Submit">
</FORM>
</BODY>
</HTML> 

答案 5 :(得分:0)

CLng对于大于2147483647或小于-2147483648的数字将抛出异常。

WScript.Echo "Enter an integer number : "
Number = WScript.StdIn.ReadLine
If IsNumeric(Number) Then
    ' Here, it still could be floating point number out of CLng's range
    If CDbl(Number) <= 2147483647 and CDbl(Number) >= -2147483648 Then
    ' Here, it still could be floating point number
        If CLng(Number) & "" = Number & "" Then
            WScript.Echo "Integer"
        Else
            WScript.Echo "Not an integer"
        End If
    Else
        WScript.Echo "Not an integer"
    End If
End If

答案 6 :(得分:-3)

另一种方式,

if number > 0 then
...
end if