VBScript : checking if the user input is an integer

Viewed 88019

Within a VBScript, I need to make sure the user inputs a integer.

Here is what I have now :

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

The problem is that CLng() doesn't test if my number is an integer : the number is converted anyway.

Is there a way to check if a number is an integer ?

EDIT :

The suggested answer doesn't work as well for me. Here is a new version of my code :

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

and here is the output :

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
8 Answers

CLng would throw an exceprion for numbers bigger than 2147483647 or lower than -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

Here is a slightly different way to do it, it doesn’t matter if you are passing an integer, long, or a string. The function also checks if the number is a positive number, but you can change that by removing Abs().

If IsNumber("1010") Then
 MsgBox "Valid whole number"
Else
 MsgBox "Not a valid whole number"
End If

Function IsNumber(ByVal Number)

 IsNumber = False
 If IsNumeric(Number) Then
  If CStr(Number) = CStr(Abs(Fix(Number))) Then
   IsNumber = True
  End If
 End If

End Function
Related