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() не проверяет, является ли мой номер целым числом: число все равно преобразуется.

Есть ли способ проверить, является ли число целым?

EDIT:

Предлагаемый ответ не подходит для меня. Вот новая версия моего кода:

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

Ответы

Ответ 1

Это очень похоже на ваш код:

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

Это действительно сработает:

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".

Если вы введете "10.5" (в виде строки) при преобразовании в CLng(), вы получите 10, после чего преобразуется в "10" и сравнивается с "10.5". Поскольку строки не совпадают, он говорит, что это не целое число.

Если вы введете "10", преобразованный в CLng() 10, верните его в строку "10", которая вернет true при сопоставлении с "10", что означает, что это целое число.

Несколько лет спустя, я знаю, но я изучал это сам сейчас и был озадачен этим. Надеюсь, что это поможет кому-то еще задаваться вопросом, как я.

Ответ 3

Если вы сделаете что-то подобное, оно должно работать:

если Number = CInt (Number) Then

Ответ 4

Я нашел эту простую программу для проверки числового значения 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

Ответ cogumel выше почти получает его, но неудачно для меня странным образом. Я обнаружил, что это вернет true для "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

Я также проверил это с нулевыми (истинными) отрицательными целыми числами (true), как в кавычках, так и вне их.

Ответ 6

другой способ,

if number > 0 then
...
end if