Alain Verleyen: Um ehrlich zu sein, habe ich keine Ahnung, was die Absicht des Auftraggebers ist. Wenn wir es als eine allgemeine Anfrage verstehen: "Wie kann man prüfen, ob der Inhalt einer Variablen numerisch ist?", ist die eleganteste Lösung die Verwendung eines regulären Ausdrucks.
Google ist Ihr Freund! Hier ist ein Link für die Implementierung von "IsNumeric" in vielen, vielen Sprachen, einschließlich C und C++ (aber nicht MQL).
Create a boolean function which takes in a string and tells whether it is a numeric string (floating point and negative numbers included) in the syntax the language uses for numeric literals or numbers converted from strings. The first file is the package interface containing the declaration of the Is_Numeric function. The second file is the...
Alain Verleyen: Ehrlich gesagt habe ich keine Ahnung von der Absicht des Auftraggebers Wenn wir es als allgemeine Anfrage verstehen: "Wie kann man prüfen, ob der Inhalt einer Variablen numerisch ist?", ist die eleganteste Lösung die Verwendung eines regulären Ausdrucks.
Meine Absicht ist die allgemeine Anfrage, von der Sie ausgegangen sind - wenn eine Zahl numerisch ist, dann ist sie numerisch und kann für eine vernünftige Berechnung verwendet werden, ohne dass irgendeine Form von Fehler aufgrund der Natur der Zahlen auftritt. Stellen Sie einen Beispielcode in MQL4 vor, der mit regulären Ausdrücken zu tun hat.
Ja, der Auftraggeber ist jetzt hier, und er hört und sieht all die Lösungen und Gegenlösungen, die bisher vorgeschlagen wurden. Ich schätze die Bemühungen all derer, die kommentiert haben. Mir gefallen die von honest_knave vorgestellten Beispielcodes. Erstens hat er seine Kommentare die ganze Zeit über mit Codes untermauert. Zweitens hat er in keinem seiner Beispiele hart kodiert. Außerdem haben seine Codes jede Form von Null (0, 0.0, 0.00, .0, usw.) problemlos berücksichtigt, und sie sind leicht verständlich. Ich glaube nicht, dass die Verwendung von StringToDouble() besser ist.
Vielen Dank an euch alle @ whroeder1, honest_knave, Ernst Van Der Merwe, Alain Verleyen und Fernando Carreiro.
Wenn das Ergebnis wahr ist, können Sie die Zeichenkette in eine Zahl umwandeln.
Aber es gibt noch einige weitere Dinge, die wir überprüfen müssen. Wir müssen zwar prüfen, ob '+' oder '-' als erstes Zeichen erscheint, aber auch, ob es nicht allein steht.
Um ehrlich zu sein, habe ich keine Ahnung, was die Absicht des Auftraggebers ist.
Wenn wir es als eine allgemeine Anfrage verstehen: "Wie kann man prüfen, ob der Inhalt einer Variablen numerisch ist?", ist die eleganteste Lösung die Verwendung eines regulären Ausdrucks.
Und hier ist eine andere, die vollständiger zu sein scheint (ganz am Ende der Seite):
Ehrlich gesagt habe ich keine Ahnung von der Absicht des Auftraggebers
Wenn wir es als allgemeine Anfrage verstehen: "Wie kann man prüfen, ob der Inhalt einer Variablen numerisch ist?", ist die eleganteste Lösung die Verwendung eines regulären Ausdrucks.
Vielen Dank an euch alle @ whroeder1, honest_knave, Ernst Van Der Merwe, Alain Verleyen und Fernando Carreiro.
So:
z.B..
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
Wenn das Ergebnis wahr ist, können Sie die Zeichenkette in eine Zahl umwandeln.
So:
z.B..
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
Wenn das Ergebnis wahr ist, können Sie die Zeichenkette in eine Zahl umwandeln.