在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
答案 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)
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