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