VBScript: проверка, является ли пользовательский ввод целым числом - PullRequest
17 голосов
/ 07 октября 2009

В 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 ]

16 голосов
/ 10 января 2012

Это на самом деле будет работать:

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», то есть это целое число.

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

13 голосов
/ 07 октября 2009

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

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
3 голосов
/ 22 декабря 2016

ответ 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), отрицательными целыми числами (true), как в кавычках, так и вне их.

3 голосов
/ 07 октября 2009

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

если число = CInt (число), то

0 голосов
/ 22 марта 2019

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
0 голосов
/ 10 июля 2011

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

по-другому,

if number > 0 then
...
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...