Comunidad de diseño web y desarrollo en internet online

Un programa que realiza cálculos con input_text me devuelve NaN

Citar            
MensajeEscrito el 22 Sep 2011 09:21 am
Hola a todos...

Intente hace unos días hacer un programa, iterativo, para converger a una cierta solución. Como no estoy muy familiarizado con el componente datagrid, utilicé 18 campos de texto dinámico donde se mostraban paso a paso los resultados de los cálculos; los primeros textos dinámicos dependian de un input_text, y los posteriores eran cálculos con los textos dinámicos anteriores. Todas las instrucciones las introduje en un boton con la acción de on (release) { con el fin de que, una vez asignados los valores a las variables que requería para arrancar, cada vez que presionara el botón se realizara una iteración.

Lo curioso de este problema, que talvez supongan que se trata de combinar strings con numbers accidentalmente, y que casi estoy seguro de que no es eso, es que sin modificar el código ni hacer ningún cambio aveces el programa funciona perfectamente aunque la mayoria de las veces arroja NaN. ¿Cómo es posible que suceda eso?

+ El código que utilice fué el siguiente:

- En el primer fotograma:

Código :

stop();
n_iter.text = "Empezar a iterar";
i = j = 1000;
guardar.text = "Guardar";


-En el botón que asigna el valor de los input text a las variables antes de arrancar:

Código :

on (release){
   guardar.text = "Guardado";
   var u_1:Number = x1.text;
   var u_2:Number = x2.text;
   var u_3:Number = x3.text;
   var m_1:Number = m1.text;
   var m_2:Number = m2.text;
   var m_3:Number = m3.text;
   var k_1:Number = k1.text;
   var k_2:Number = k2.text;
   var k_3:Number = k3.text;
   i = 1000;
   j = 1000;
}


- En el boton que incia la iteración:

Código :

on (release){
   i_i.text = i/1000;
   j = i+1000;
   j_j.text = j/1000;
   i = j+1000;
   n_iter.text = "Seguir Iterando";
   a_2.text = u_1;
   a_4.text = u_2;
   a_6.text = u_3;
   b_2.text = u_1*m_1;
   b_4.text = u_2*m_2;
   b_6.text = u_3*m_3;
   c_5.text = Number(b_6.text);
   c_3.text = Number(c_5.text)+Number(b_4.text);
   c_1.text = Number(c_3.text)+Number(b_2.text);
   d_1.text = Math.round(Number(c_1.text)/k_1*100000)/100000;
   d_3.text = Math.round(Number(c_3.text)/k_2*100000)/100000;
   d_5.text = Math.round(Number(c_5.text)/k_3*100000)/100000;
   e_2.text = Number(d_1.text);
   e_4.text = Number(e_2.text)+Number(d_3.text);
   e_6.text = Number(e_4.text)+Number(d_5.text);
   f_2.text = Math.round(u_1/Number(e_2.text));
   f_4.text = Math.round(u_2/Number(e_4.text));
   f_6.text = Math.round(u_3/Number(e_6.text));
   u_1 = Math.round(Number(e_2.text)/Number(e_2.text)*100000)/100000;
   u_2 = Math.round(Number(e_4.text)/Number(e_2.text)*100000)/100000;
   u_3 = Math.round(Number(e_6.text)/Number(e_2.text)*100000)/100000;
   a2_2.text = u_1;
   a2_4.text = u_2;
   a2_6.text = u_3;
   b2_2.text = Math.round(u_1*m_1*1000)/1000;
   b2_4.text = Math.round(u_2*m_2*1000)/1000;
   b2_6.text = Math.round(u_3*m_3*1000)/1000;
   c2_5.text = Number(b2_6.text);
   c2_3.text = Number(c2_5.text)+Number(b2_4.text);
   c2_1.text = Number(c2_3.text)+Number(b2_2.text);
   d2_1.text = Math.round(Number(c2_1.text)/k_1*100000)/100000;
   d2_3.text = Math.round(Number(c2_3.text)/k_2*100000)/100000;
   d2_5.text = Math.round(Number(c2_5.text)/k_3*100000)/100000;
   e2_2.text = Number(d2_1.text);
   e2_4.text = Number(e2_2.text)+Number(d2_3.text);
   e2_6.text = Number(e2_4.text)+Number(d2_5.text);
   f2_2.text = Math.round(u_1/Number(e2_2.text));
   f2_4.text = Math.round(u_2/Number(e2_4.text));
   f2_6.text = Math.round(u_3/Number(e2_6.text));
   u_1 = Number(e2_2.text)/Number(e2_2.text);
   u_2 = Number(e2_4.text)/Number(e2_2.text);
   u_3 = Number(e2_6.text)/Number(e2_2.text);
}


Al presionar el botón "Empezar a iterar" muestra la iteracion 1 y 2, al volver a presionarlo muestra la iteracion 3 y 4 y asi sucesivamente hasta que se obtenga el resultado deseado.

Espero su ayuda, recomendaciones/consejos porfavor; soy muy nuevo en esto del flash.

Gracias!

Por Joelx9

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2011 01:28 pm
Si quieres sacar un Number de un textfield tienes que hacer esto:

var u_1:Number = Number(x1.text);

Si lo que introduzca el usuario no es un número (por ejemplo una letra) entonces da NaN también. Para evitar eso puedes usar la propiedad restrict de TextField

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Sep 2011 04:19 pm

solisarg escribió:

Si quieres sacar un Number de un textfield tienes que hacer esto:

var u_1:Number = Number(x1.text);

Si lo que introduzca el usuario no es un número (por ejemplo una letra) entonces da NaN también. Para evitar eso puedes usar la propiedad restrict de TextField

Jorge


utilizando esa sintaxis:

var u_1:Number = Number(x1.text);
trace(u_1);

me arroja NaN; desde el principio todos los calculos de los textos dinamicos me sale NaN

y de esta forma:

var u_1:Number = x1.text;
trace(u_1);

me arroja un número... y los primeros textfield, de la primera iteracion, los calcula pero ya los posteriores me sale NaN, tratare de subir unas imagenes :D

Gracias!

Por Joelx9

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2011 04:37 pm
Esta es la falla más común:


Aquí falla a medias:


Aquí funcionó:


*No se alteró el código en ningún ejemplo.

Por Joelx9

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2011 05:46 pm
Esto debería funcionar

Código ActionScript :

x1.text = "8"
var u_1:Number = Number(x1.text);
trace(u_1);


¿Tu textfield tiene solo numeros? ¿Quizás tengas algo como por ejemplo $ delante?

Jorge

PD: Las imágenes no se ven, o por lo menos yo no las veo

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Sep 2011 06:44 am

solisarg escribió:

Esto debería funcionar

Código ActionScript :

x1.text = "8"
var u_1:Number = Number(x1.text);
trace(u_1);


¿Tu textfield tiene solo numeros? ¿Quizás tengas algo como por ejemplo $ delante?

Jorge

PD: Las imágenes no se ven, o por lo menos yo no las veo


sólo son numeros en los textfields..
intentare definir las variables desde el incio, sin tener que introducirlas por medio de los textfields a ver que sucede... aqui te pongo el link del .fla por si quieres checarlo
Newmark
muchas gracias

Por Joelx9

2 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.