Come controllo se il contenuto di una variabile è numerico?

 
Ciao a tutti. Come faccio a controllare se il contenuto di una variabile è numerico, in particolare il contenuto di un oggetto casella di testo sulla chat? Ho provato quanto segue ma non ha funzionato:

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

if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}
Infatti continuava a indicare true, sia che OBJPROP_TEXT sia numerico o meno. Quale potrebbe essere la soluzione al problema. Grazie in anticipo.
 

MathIsValidNumber non funziona così. Non capirebbe "Quattro" come 4 più di "four" o "FOUR" o "vier" o "quatre" o "quatro".

Se lanciate "Quattro" come un doppio, il risultato è 0.

Poiché 0 è un numero valido, la vostra funzione restituisce true.

Dovrete costruire le vostre conversioni di parole in numeri se volete ottenere questo risultato.

Il vostro compilatore dovrebbe avervi avvertito di una conversione implicita ... avete

#property strict

all'inizio del tuo codice?

 
honest_knave:

MathIsValidNumber non funziona così. Non capirebbe "Quattro" come 4 più di "four" o "FOUR" o "vier" o "quatre" o "quatro".

Se lanciate "Quattro" come un doppio, il risultato è 0.

Poiché 0 è un numero valido, la vostra funzione restituisce true.

Dovrete costruire le vostre conversioni di parole in numeri se volete ottenere questo risultato.

Il vostro compilatore dovrebbe avervi avvertito di una conversione implicita ... avete

#property strict

all'inizio del tuo codice?

Penso che tu non abbia capito la domanda. Ho scritto il codice qui sopra e ci si aspetta che il compilatore restituisca false poiché "Quattro" non è un numero. Ma sta restituendo true (nel senso che "Quattro" è un numero). Come posso codificarlo in modo appropriato? Non sto chiedendo di convertire "Quattro" in un numero.
 

Penso che tu non capisca la risposta

Se spingi una stringa come "Four" o "banana" o "MetaQuotes" in un doppio il risultato è 0.

0 è un numero valido.

Se stavi usando #property strict il tuo compilatore ti avrebbe avvisato di questo problema.

Potete testare che il "numero" non sia 0, ma non potete intrappolare se è stato deliberatamente inserito come 0, o è stato solo convertito in 0 nel casting.

   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:

Penso che tu non capisca la risposta

Se spingi una stringa come "Four" o "banana" o "MetaQuotes" in un doppio il risultato è 0.

0 è un numero valido.

Se stavi usando #property strict il tuo compilatore ti avrebbe avvisato di questo problema.

Per favore controlla di nuovo il mio codice iniziale. Ho appena fatto una piccola correzione. Dovrebbe essere
ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
e non
ObjectSetInteger(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
Mi dispiace per l'inconveniente. Ora puoi anche correggere la tua risposta, grazie perché anticipo la tua gentile risposta. Non credo di usare #property strict.
 

Per favore, rileggi il mio post.

Sei d'accordo che 0 è un numero valido?

 
honest_knave:

Per favore, rileggi il mio post.

Sei d'accordo che 0 è un numero valido?

Certo, 0 è un numero valido. Perché chiederlo?
 
macpee:
Naturalmente, 0 è un numero valido

Quale parte della mia risposta non capisce?

Per ripetere di nuovo:

honest_knave:

Se lanci "Quattro" come un doppio, il risultato è 0.

Poiché 0 è un numero valido, la vostra funzione restituisce true.

honest_knave:

Se si spinge una stringa come "Four" o "banana" o "MetaQuotes" in un doppio, il risultato è 0.

0 è un numero valido.

 
honest_knave:
Quale parte della mia risposta non capisci?
Ma l'OBJPROP_TEXT è "Quattro" e non "0". Inoltre, hai detto che avrebbe considerato "Quattro" come "0" poiché ... Ora la domanda è: ho spinto "Quattro" al doppio? Quale parte del mio codice ha spinto "Quattro" o "banana" o "Metaquote" al doppio?
 
macpee:
Ma l'OBJ_TEXT è "Quattro" e non "0". Inoltre, hai detto che avrebbe considerato "Quattro" come "0" poiché ... Ora la domanda è: ho spinto "Quattro" al doppio?

Se dicessi di fare un numero con "sdgfjhsdfkjdshfkjsfdhskdjh" che numero mi darebbe?

 
honest_knave:

Se ti dicessi di fare un numero con "sdgfjhsdfkjdshfkjsfdhskdjh" che numero mi daresti?

0 ovviamente. Ma la domanda corrispondente al codice che ho scritto è che non mi hai chiesto di fare un numero con "sdgfjhsdfkjdshfkjsfdhskdjh". Ma di decidere se "sdgfjhsdfkjdshfkjsfdhskdjh" è un numero o no. Quindi penso che si possa fare un numero con "sdgfjhsdfkjdshfkjsfdhskdjh". Ma resta il fatto che "sdgfjhsdfkjdshfkjsfdhskdjh" non è un numero.