Dans un script VBScript, je dois m'assurer que l'utilisateur entre un entier.
Voici ce que j'ai maintenant:
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
Le problème est que CLng () ne teste pas si mon nombre est un entier: le nombre est converti quand même.
Existe-t-il un moyen de vérifier si un nombre est un entier?
MODIFIER :
La réponse suggérée ne fonctionne pas aussi bien pour moi. Voici une nouvelle version de mon code:
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
et voici la sortie:
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
Ceci est très similaire à votre code:
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
Cela fonctionnera réellement:
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
Auparavant, le problème était que vous compariez une chaîne à un entier qui ne donnerait jamais la valeur true.
Maintenant, vous prenez une chaîne, vérifiez si elle est numérique, transformez-la en CLng () qui ne renverra que la partie entière du nombre, la transformera en chaîne et comparera finalement avec la chaîne d'origine.
Si vous entrez ... "asdasD" (ou toute autre chose non numérique), le test "isNumeric" n'est pas passé.
Si vous entrez "10.5" (sous forme de chaîne) lors de la conversion en CLng (), vous obtenez 10, puis la conversion en "10" est comparée à "10.5". Comme les chaînes ne correspondent pas, cela signifie que ce n'est pas un entier.
Si vous entrez "10" converti en CLng (), c'est 10, en chaîne, c'est "10" qui renvoie un vrai en le comparant à "10", ce qui signifie qu'il s'agit d'un entier.
Quelques années trop tard, je le sais, mais je me suis penchée sur la question moi-même tout à l'heure et cela m'a rendu perplexe. J'espère que cela aidera les autres à se poser des questions comme moi.
Si vous faites quelque chose comme ça, ça devrait marcher:
si Number = CInt (Number) Alors
la réponse de Cogumel ci-dessus l'obtient presque, mais a échoué pour moi de façon étrange. J'ai découvert que cela retournerait vrai pour "5" (entre guillemets), mais pas 5 (sans guillemets). Lors de la comparaison finale, vous devez également convertir l'entrée d'origine en chaîne afin que tout fonctionne de manière fiable. Ici, il est enveloppé dans une fonction soignée:
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
J'ai également testé cela avec des entiers négatifs (vrais) nuls (vrais), entre guillemets et entre guillemets.
J'ai trouvé ce programme simple pour valider la valeur numérique de http://rindovincent.blogspot.com/p/vbscript-programs.html et avec permission, je le colle. J'espère que cela sera utile pour les débutants comme moi
<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>