Comment vérifier si le contenu d'une variable est numérique ?

 
Bonjour à tous. Comment puis-je vérifier si le contenu d'une variable est numérique, notamment le contenu d'un objet de type zone de texte sur le chat ? J'ai essayé ce qui suit mais cela n'a pas fonctionné :

ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");

if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}
En fait, il continue à indiquer vrai, que OBJPROP_TEXT soit numérique ou non. Quelle pourrait être la solution à ce problème ? Merci d'avance.
 

MathIsValidNumber ne fonctionne pas de cette façon. Il ne comprendrait pas "Four" comme 4, pas plus que "four" ou "FOUR" ou "vier" ou "quatre" ou "quatro".

Si vous convertissez "Four" en un double, le résultat est 0.

Comme 0 est un nombre valide, votre fonction renvoie vrai.

Vous devrez intégrer vos propres conversions de mots en nombres si vous souhaitez obtenir ce résultat.

Votre compilateur aurait dû vous avertir d'une conversion implicite ... avez-vous mis

#property strict

en haut de votre code ?

 
honest_knave:

MathIsValidNumber ne fonctionne pas de cette façon. Il ne comprendrait pas "Four" comme 4, pas plus que "four" ou "FOUR" ou "vier" ou "quatre" ou "quatro".

Si vous convertissez "Four" en un double, le résultat est 0.

Comme 0 est un nombre valide, votre fonction renvoie vrai.

Vous devrez intégrer vos propres conversions de mots en nombres si vous souhaitez obtenir ce résultat.

Votre compilateur aurait dû vous avertir d'une conversion implicite ... avez-vous mis

#property strict

en haut de votre code ?

Je pense que vous n'avez pas compris la question. J'ai écrit le code ci-dessus et on s'attend à ce que le compilateur renvoie false puisque "Four" n'est pas un nombre. Mais il renvoie true (ce qui signifie que "Four" est un nombre). Comment puis-je le coder de manière appropriée ? Je ne demande pas de convertir "Quatre" en un nombre.
 

Je pense que vous ne comprenez pas la réponse

Si vous introduisez une chaîne de caractères comme "Four" ou "banana" ou "MetaQuotes" dans un double, le résultat est 0.

0 est un nombre valide.

Si vous utilisiez #property strict, votre compilateur vous aurait averti de ce problème.

Vous pouvez tester que le "nombre" n'est pas 0, mais vous ne pouvez pas vérifier s'il a été délibérément entré comme 0, ou s'il a simplement été converti en 0 lors du casting.

   ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
   double as_double = (double) ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT);
   if(as_double !=0 && MathIsValidNumber(as_double)) Print("Object Text Is Numeric");
 
honest_knave:

Je pense que vous ne comprenez pas la réponse

Si vous insérez une chaîne de caractères comme "Four" ou "banana" ou "MetaQuotes" dans un double, le résultat est 0.

0 est un nombre valide.

Si vous utilisiez #property strict, votre compilateur vous aurait averti de ce problème.

Veuillez vérifier à nouveau mon code initial. J'ai juste fait une légère correction. Il est censé être
ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
et non
ObjectSetInteger(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
Désolé pour la gêne occasionnée. Vous pouvez maintenant corriger votre réponse également. Merci car j'anticipe votre aimable réponse. Je ne pense pas que j'utilise #property strict.
 

Veuillez relire mon message.

Êtes-vous d'accord que 0 est un nombre valide ?

 
honest_knave:

Veuillez relire mon message.

Êtes-vous d'accord que 0 est un nombre valide ?

Bien sûr, 0 est un nombre valide. Pourquoi demander ?
 
macpee:
Bien sûr, 0 est un nombre valide

Quelle partie de ma réponse ne comprenez-vous pas ?

Pour réitérer encore une fois :

honest_knave:

Si vous transformez "Quatre" en un double, le résultat est 0.

Comme 0 est un nombre valide, votre fonction renvoie vrai.

honest_knave:

Si vous transformez une chaîne de caractères comme "Four" ou "banana" ou "MetaQuotes" en un double, le résultat est 0.

0 est un nombre valide.

 
honest_knave:
Quelle partie de ma réponse ne comprenez-vous pas ?
Mais le OBJPROP_TEXT est "Quatre" et non "0". De plus, vous avez dit qu'il considérerait "Four" comme "0" puisque... Maintenant la question est de savoir si j'ai poussé "Four" vers le double ? Quelle partie de mon code a poussé "Four" ou "banane" ou "Metaquote" en double ?
 
macpee:
Mais l'OBJ_TEXT est "Quatre" et non "0". De plus, vous avez dit qu'il considérerait "Quatre" comme "0" puisque... Maintenant la question est, ai-je poussé "Quatre" à doubler ?

Si je te disais de faire un nombre à partir de "sdgfjhsdfkjdshfkjsfdhskdjh", quel nombre me donnerais-tu ?

 
honest_knave:

Si je te disais de faire un nombre à partir de "sdgfjhsdfkjdshfkjsfdhskdjh", quel nombre me donnerais-tu ?

0 bien sûr. Mais la question correspondant au code que j'ai écrit est que vous ne m'avez pas demandé de faire un nombre à partir de "sdgfjhsdfkjdshfkjsfdhskdjh". Mais de décider si "sdgfjhsdfkjdshfkjsfdhskdjh" est un nombre ou non. Donc je pense que vous pouvez faire un nombre à partir de "sdgfjhsdfkjdshfkjsfdhskdjh". Mais le fait demeure que "sdgfjhsdfkjdshfkjsfdhskdjh" n'est pas un nombre.