¿Cómo puedo comprobar si el contenido de una variable es numérico?

 
Hola a todos. ¿Cómo puedo comprobar si el contenido de una variable es numérico, especialmente el contenido de un objeto caja de texto en el chat? He intentado lo siguiente pero no ha funcionado:

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

if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}
De hecho seguía indicando true, si OBJPROP_TEXT es numérico o no. Cuál podría ser la solución al tema. Gracias de antemano.
 

MathIsValidNumber no funciona así. No entendería "Four" como 4 más que "four" o "FOUR" o "vier" o "quatre" o "quatro".

Si se lanza "Cuatro" como un doble, el resultado es 0.

Como el 0 es un número válido, su función devuelve true.

Tendrás que construir tus propias conversiones de palabras a números si quieres conseguirlo.

Tu compilador debería haberte advertido sobre una conversión implícita... ¿tienes

#property strict

en la parte superior de tu código?

 
honest_knave:

MathIsValidNumber no funciona así. No entendería "Four" como 4 más que "four" o "FOUR" o "vier" o "quatre" o "quatro".

Si se lanza "Cuatro" como un doble, el resultado es 0.

Como el 0 es un número válido, su función devuelve true.

Tendrás que construir tus propias conversiones de palabras a números si quieres conseguirlo.

Tu compilador debería haberte advertido sobre una conversión implícita... ¿tienes

#property strict

en la parte superior de tu código?

Creo que no has entendido la pregunta. He escrito el código de arriba y se espera que el compilador devuelva false ya que "Cuatro" no es un número. Pero devuelve true (lo que significa que "Cuatro" es un número). ¿Cómo puedo codificarlo adecuadamente? No estoy pidiendo que se convierta "Cuatro" en un número.
 

Creo que no entiendes la respuesta

Si introduces una cadena como "Four" o "banana" o "MetaQuotes" en un doble el resultado es 0.

El 0 es un número válido.

Si estuvieras usando #property strict tu compilador te habría alertado de este problema.

Puedes probar que el "número" no es 0, pero no puedes atrapar si fue introducido deliberadamente como 0, o simplemente fue convertido a 0 en el 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:

Creo que no entiendes la respuesta

Si introduces una cadena como "Four" o "banana" o "MetaQuotes" en un doble el resultado es 0.

El 0 es un número válido.

Si estuvieras usando #property strict tu compilador te habría alertado de este problema.

Por favor, revisa de nuevo mi código inicial. Acabo de hacer una pequeña corrección. Se supone que es
ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
y no
ObjectSetInteger(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
Disculpe las molestias. Ahora puede corregir su respuesta también. Gracias ya que anticipo su amable respuesta. Creo que no estoy usando #property strict.
 

Por favor, vuelva a leer mi post.

¿Estás de acuerdo en que el 0 es un número válido?

 
honest_knave:

Por favor, vuelva a leer mi post.

¿Está de acuerdo en que el 0 es un número válido?

Por supuesto, el 0 es un número válido. ¿Por qué lo pregunta?
 
macpee:
Por supuesto, el 0 es un número válido

¿Qué parte de mi respuesta no has entendido?

Para repetirlo de nuevo:

honest_knave:

Si usted lanza "Cuatro" como un doble, el resultado es 0.

Como el 0 es un número válido, tu función devuelve true.

honest_knave:

Si metes una cadena como "Four" o "banana" o "MetaQuotes" en un doble el resultado es 0.

El 0 es un número válido.

 
honest_knave:
¿Qué parte de mi respuesta no entiendes?
Pero el OBJPROP_TEXT es "Cuatro" y no "0". Además, usted dijo que consideraría "Cuatro" como "0" ya que ... Ahora la pregunta es, ¿empujé "Cuatro" al doble? ¿Qué parte de mi código empujó "Cuatro" o "plátano" o "Metaquote" a doble?
 
macpee:
Pero el OBJ_TEXT es "Cuatro" y no "0". Además, dijiste que consideraría "Cuatro" como "0" ya que ... Ahora la pregunta es, ¿empujé "Cuatro" al doble?

Si le digo que haga un número con "sdgfjhsdfkjdshfkjsfdhskdjh" ¿qué número me daría?

 
honest_knave:

Si te digo que hagas un número con "sdgfjhsdfkjdshfkjsfdhskdjh" ¿qué número me darías?

0 por supuesto. Pero la pregunta correspondiente al código que he escrito es que no me has pedido que haga un número con "sdgfjhsdfkjdshfkjsfdhskdjh". Sino que decida si "sdgfjhsdfkjdshfkjsfdhskdjh" es un número o no. Así que creo que se puede hacer un número de "sdgfjhsdfkjdshkjsfdhskdjh". Pero el hecho es que "sdgfjhsdfkjdshfkjsfdhskdjh" no es un número.