Wie prüfe ich, ob der Inhalt einer Variablen numerisch ist?

 
Hallo zusammen. Wie prüfe ich, ob der Inhalt einer Variablen numerisch ist, insbesondere der Inhalt eines Textfeldobjekts im Chat? Ich habe das Folgende versucht, aber es hat nicht funktioniert:

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

if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}
Es wurde immer wahr angezeigt, egal ob OBJPROP_TEXT numerisch ist oder nicht. Was könnte die Lösung für dieses Problem sein? Vielen Dank im Voraus.
 

MathIsValidNumber funktioniert nicht auf diese Weise. Es würde "Four" nicht als 4 verstehen, genauso wenig wie "four" oder "FOUR" oder "vier" oder "quatre" oder "quatro".

Wenn Sie "Four" als Double ausgeben, ist das Ergebnis 0.

Da 0 eine gültige Zahl ist, gibt Ihre Funktion true zurück.

Sie müssen Ihre eigenen Konvertierungen von Wörtern in Zahlen einbauen, wenn Sie das erreichen wollen.

Ihr Compiler sollte Sie vor einer impliziten Konvertierung gewarnt haben ... haben Sie

#property strict

am Anfang Ihres Codes?

 
honest_knave:

MathIsValidNumber funktioniert nicht auf diese Weise. Es würde "Four" nicht als 4 verstehen, genauso wenig wie "four" oder "FOUR" oder "vier" oder "quatre" oder "quatro".

Wenn Sie "Four" als Double ausgeben, ist das Ergebnis 0.

Da 0 eine gültige Zahl ist, gibt Ihre Funktion true zurück.

Sie müssen Ihre eigenen Konvertierungen von Wörtern in Zahlen einbauen, wenn Sie das erreichen wollen.

Ihr Compiler sollte Sie vor einer impliziten Konvertierung gewarnt haben ... haben Sie

#property strict

am Anfang Ihres Codes?

Ich glaube, Sie haben die Frage nicht verstanden. Ich habe den obigen Code geschrieben und es wird erwartet, dass der Compiler false zurückgibt, da "Four" keine Zahl ist. Aber er gibt true zurück (was bedeutet, dass "Four" eine Zahl ist). Wie kann ich den Code richtig schreiben? Ich möchte nicht, dass "Four" in eine Zahl umgewandelt wird.
 

Ich glaube, Sie haben die Antwort nicht verstanden

Wenn Sie eine Zeichenkette wie "Four" oder "banana" oder "MetaQuotes" in ein Double einfügen, ist das Ergebnis 0.

0 ist eine gültige Zahl.

Wenn Sie #property strict verwenden würden, hätte Ihr Compiler Sie auf dieses Problem aufmerksam gemacht.

Sie können testen, dass die "Zahl" nicht 0 ist, aber Sie können nicht feststellen, ob sie absichtlich als 0 eingegeben wurde, oder ob sie beim Casting einfach in 0 umgewandelt wurde.

   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:

Ich glaube, Sie haben die Antwort nicht verstanden

Wenn Sie eine Zeichenkette wie "Four" oder "banana" oder "MetaQuotes" in ein Double einfügen, ist das Ergebnis 0.

0 ist eine gültige Zahl.

Wenn Sie #property strict verwenden würden, hätte Ihr Compiler Sie auf dieses Problem aufmerksam gemacht.

Bitte überprüfen Sie noch einmal meinen ursprünglichen Code. Ich habe nur eine kleine Korrektur vorgenommen. Es sollte heißen
ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
und nicht
ObjectSetInteger(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
Entschuldigung für die Unannehmlichkeiten. Sie können nun auch Ihre Antwort korrigieren. Vielen Dank, ich erwarte Ihre freundliche Antwort. Ich glaube nicht, dass ich #property strict verwende.
 

Bitte lesen Sie meinen Beitrag noch einmal.

Stimmen Sie zu, dass 0 eine gültige Zahl ist?

 
honest_knave:

Bitte lesen Sie meinen Beitrag noch einmal.

Stimmen Sie zu, dass 0 eine gültige Zahl ist?

Natürlich ist 0 eine gültige Zahl. Warum fragen Sie?
 
macpee:
Natürlich ist 0 eine gültige Zahl

Welchen Teil meiner Antwort haben Sie also nicht verstanden?

Um es noch einmal zu wiederholen:

honest_knave:

Wenn Sie "Vier" in einen Double umwandeln, ist das Ergebnis 0.

Da 0 eine gültige Zahl ist, gibt Ihre Funktion true zurück.

honest_knave:

Wenn Sie eine Zeichenkette wie "Four" oder "banana" oder "MetaQuotes" in ein Double umwandeln, ist das Ergebnis 0.

0 ist eine gültige Zahl.

 
honest_knave:
Welchen Teil meiner Antwort haben Sie also nicht verstanden?
Aber der OBJPROP_TEXT ist "Vier" und nicht "0". Außerdem sagten Sie, dass "Vier" als "0" angesehen wird, da ... Die Frage ist nun, ob ich "Vier" verdoppelt habe? Welcher Teil meines Codes hat "Four" oder "banana" oder "Metaquote" auf double gesetzt?
 
macpee:
Aber der OBJ_TEXT ist "Vier" und nicht "0". Außerdem sagten Sie, es würde "Vier" als "0" betrachten, da ... Die Frage ist nun, habe ich "Vier" auf das Doppelte gedrückt?

Wenn ich sage, mach eine Zahl aus "sdgfjhsdfkjdshfkjsfdhskdjh", welche Zahl würdest du mir geben?

 
honest_knave:

Wenn ich sage, mach eine Zahl aus "sdgfjhsdfkjdshfkjsfdhskdjh", welche Zahl würdest du mir geben?

Natürlich 0. Aber die Frage, die sich auf den von mir geschriebenen Code bezieht, ist, dass Sie mich nicht gebeten haben, eine Zahl aus "sdgfjhsdfkjdshfkjsfdhskdjh" zu bilden. Sondern zu entscheiden, ob "sdgfjhsdfkjdshfkjsfdhskdjh" eine Zahl ist oder nicht. Ich denke also, man kann aus "sdgfjhsdfkjdshfkjsfdhskdjh" eine Zahl machen. Aber die Tatsache bleibt, dass "sdgfjhsdfkjdshfkjsfdhskdjh" keine Zahl ist.