web-dev-qa-db-ja.com

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()がテストしないことです。数値はとにかく変換​​されます。

数値が整数かどうかを確認する方法はありますか?

編集:

提案された答えは私にとってもうまくいきません。これが私のコードの新しいバージョンです:

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
18
Jérôme

これはあなたのコードに非常に似ています:

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
13
backslash17

これは実際に機能します:

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を返します。つまり、整数であることを意味します。

数年遅すぎると思いますが、私は今これを自分で調べていて、戸惑いました。それが私のように不思議に思っている誰かを助けることを願っています。

17
cogumel0

上記のコグメルの答えはほとんどそれを理解していますが、私にとって奇妙な方法で失敗しました。 "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)で、引用符の内側と外側の両方でこれをテストしました。

3
Stephen R

あなたがこのようなことをするなら、それはうまくいくはずです:

if Number = CInt(Number)Then

3
kemiller2002

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
Evžen Černý

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
Gautham