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
これはあなたのコードに非常に似ています:
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
これは実際に機能します:
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」と比較されます。文字列が一致しないため、整数ではないと表示されます。
CLng()に変換された「10」を入力すると、10になり、文字列に戻ります。「10」は、「10」と照合するとtrueを返します。つまり、整数であることを意味します。
数年遅すぎると思いますが、私は今これを自分で調べていて、戸惑いました。それが私のように不思議に思っている誰かを助けることを願っています。
上記のコグメルの答えはほとんどそれを理解していますが、私にとって奇妙な方法で失敗しました。 "5"(引用符で囲まれている)ではtrueが返されますが、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)で、引用符の内側と外側の両方でこれをテストしました。
あなたがこのようなことをするなら、それはうまくいくはずです:
if Number = CInt(Number)Then
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
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>