Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
MathIsValidNumber() akzeptiert einen Double. Bitte prüfen Sie die Dokumentation.
Sie geben einen String an.
Wenn Sie nicht ständig meine Kommentare über die Verwendung von #property strict ignorieren würden, würden Sie sehen, dass der Compiler Sie davor warnt.
Wenn Sie eine Zeichenkette aus Buchstaben nehmen und sie zu einem Double machen, wird der Wert des Double zu 0.
0 ist eine gültige Zahl.
Deshalb gibt Ihr Code true zurück.
MathIsValidNumber() akzeptiert einen Double. Bitte prüfen Sie die Dokumentation.
Sie geben einen String an.
Wenn Sie nicht ständig meine Kommentare über die Verwendung von #property strict ignorieren würden, würden Sie sehen, dass der Compiler Sie davor warnt.
Wenn Sie eine Zeichenkette aus Buchstaben nehmen und sie zu einem Double machen, wird der Wert des Double zu 0.
0 ist eine gültige Zahl.
Deshalb gibt Ihr Code true zurück.
Aber Sie haben mir in Ihrer Antwort nicht gesagt, dass MathIsValidNumber() nur Double vergleicht, und nicht Strings. Übrigens, welche Zahl ist keine gültige Zahl? Außer komplexe Zahlen oder Unendlichkeiten, und wer will die schon in MQL4 verwenden. Wie auch immer, das "Schlüsselwort" scheint irreführend zu sein.
Aber Sie haben mir in Ihrer Antwort nicht gesagt, dass MathIsValidNumber() nur Double vergleicht und nicht Strings.
Ich nahm an, Sie hätten sich die Mühe gemacht, die Dokumentation zu lesen...
Und wenn Sie nicht ständig meinen Rat über #property strict ignoriert hätten...
Also frage ich noch einmal: Wie lautet der Befehl, der dem Compiler sagt, dass eine Variable eine Zeichenkette enthält und nicht irgendeine Form von Zahl? Vielen Dank für Ihre vorausschauende Antwort.
Wenn Sie nicht erwarten, dass der Wert jemals 0 sein wird, wandeln Sie den String in einen Double um und testen Sie, dass er nicht gleich 0 ist.
Ich nahm an, Sie hätten sich die Mühe gemacht, die Dokumentation zu lesen...
Und wenn Sie meinen Rat über #property strict nicht ignoriert haben...
Wenn Sie nicht erwarten, dass der Wert jemals 0 sein wird, wandeln Sie den String in einen Double um und testen Sie, dass er nicht gleich 0 ist.
Aber was passiert mit der Zahl Null. Ich nehme an, dass es sich sowohl um einen Double- als auch um einen Integer-Wert handelt. Wenn Sie die Zeichenkette umwandeln, wird 0 zurückgegeben, wenn Sie 0 eingeben, wird 0 zurückgegeben...?
Ja, das ist ein Problem.
Sie könnten einen String-Vergleich durchführen, wenn der Cast-Wert = 0 ist
d.h. if(cast_value == 0 && str_value == "0")
Aber Sie müssten sich überlegen, ob Sie 0,0 oder 0,00 eingeben wollen.
Sie könnten die Zeichenkette in ein Zeichenarray zerlegen und jedes Zeichen testen.
Das hängt davon ab, wie wichtig das ist.
{
//---
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);
}
//+------------------------------------------------------------------+
Ja, das ist ein Problem.
Sie könnten einen String-Vergleich durchführen, wenn der Cast-Wert = 0 ist
d.h. if(cast_value == 0 && str_value == "0")
Aber Sie müssten sich überlegen, ob Sie 0,0 oder 0,00 eingeben wollen.
Sie könnten die Zeichenkette in ein Zeichenarray zerlegen und jedes Zeichen testen.
Kommt darauf an, wie wichtig das ist.
Ja, so etwas in der Art.
Sie müssen vorsichtig sein:
Ja, so etwas in der Art.
Sie müssen vorsichtig sein:
Ernst Van Der Merwe: