![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
MathIsValidNumber() accepte un double. Veuillez consulter la documentation.
Vous lui donnez une chaîne de caractères.
Si vous n'ignoriez pas mes commentaires sur l'utilisation de #property strict, vous verriez que le compilateur vous avertit à ce sujet.
Si vous prenez une chaîne de lettres et la transformez en un double, la valeur du double devient 0.
0 est un nombre valide.
C'est pourquoi votre code renvoie vrai.
MathIsValidNumber() accepte un double. Veuillez consulter la documentation.
Vous lui donnez une chaîne de caractères.
Si vous n'ignoriez pas mes commentaires sur l'utilisation de #property strict, vous verriez que le compilateur vous avertit à ce sujet.
Si vous prenez une chaîne de lettres et la transformez en un double, la valeur du double devient 0.
0 est un nombre valide.
C'est pourquoi votre code renvoie vrai.
Mais vous ne m'avez pas dit dans votre réponse que MathIsValidNumber() compare uniquement les doubles, et non les chaînes de caractères. D'ailleurs, quel nombre n'est pas un nombre valide ? Sauf les nombres complexes ou les infinis, et qui veut les utiliser dans MQL4 d'ailleurs. Quoi qu'il en soit, le "Keyword" semble trompeur.
Mais vous ne m'avez pas dit dans votre réponse que MathIsValidNumber() compare uniquement les doubles, et non les chaînes de caractères.
J'ai supposé que vous auriez pris la peine de vérifier la documentation...
Et si tu n'avais pas continué à ignorer mes conseils sur les #propriétés strictes...
Je demande donc à nouveau, quelle est la commande pour dire au compilateur de décider si une variable contient une chaîne de caractères et non une forme quelconque de nombre ? Merci pour votre réponse anticipée.
Si vous ne vous attendez pas à ce que la valeur soit jamais 0, convertissez la chaîne de caractères en un double et vérifiez qu'elle n'est pas égale à 0.
J'ai supposé que vous auriez pris la peine de vérifier la documentation...
Et si vous ne l'avez pas fait, continuez à ignorer mes conseils sur #property strict...
Si vous ne vous attendez pas à ce que la valeur soit jamais 0, transformez la chaîne en un double et testez qu'elle n'est pas égale à 0.
Mais que se passe-t-il avec le chiffre zéro ? Je présume qu'il s'agit d'une valeur double et d'une valeur entière. Lorsque vous lancez une chaîne de caractères, elle renvoie 0, lorsque vous entrez 0, elle renvoie 0. Donc... ?
Oui, c'est un problème.
Vous pourriez faire une comparaison de chaîne si la valeur cast = 0
c'est-à-dire if(cast_value == 0 && str_value == "0")
Mais il faudrait penser à la saisie de 0,0 ou 0,00.
Vous pourriez éclater la chaîne dans un tableau de caractères et tester chaque caractère.
Tout dépend de l'importance de la chose.
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
Oui, c'est un problème.
Vous pourriez faire une comparaison de chaîne si la valeur cast = 0
c'est-à-dire if(cast_value == 0 && str_value == "0")
Mais il faudrait penser à la saisie de 0,0 ou 0,00.
Vous pourriez éclater la chaîne dans un tableau de caractères et tester chaque caractère.
Tout dépend de l'importance de la chose.
Oui, ce genre de chose.
Il faudrait faire attention à :
Oui, ce genre de choses.
Il faut faire attention à :
Ernst Van Der Merwe: