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.
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.
macpee: 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.
Deshalb frage ich jetzt noch einmal: Wie lautet der Befehl, der dem Compiler sagt, dass er entscheiden soll, ob eine Variable eine Zeichenkette enthält und nicht irgendeine Form von Zahl? Vielen Dank für Ihre vorausschauende Antwort. In Visual Basic erinnere ich mich an ein Schlüsselwort wie "Isnumeric".
macpee: 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...
macpee: 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.
Gute Antwort. Ich kann es jetzt ausprobieren. Aber was passiert mit der Zahl Null. Ich nehme an, dass sie sowohl ein Double- als auch ein Integer-Wert ist. Wenn man String castet, gibt es 0 zurück, wenn man 0 eingibt, gibt es 0 zurück. Also...?
macpee: 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.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
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: