Comunidad de diseño web y desarrollo en internet online

Problemas con operación aritmética...

Citar            
MensajeEscrito el 22 May 2006 04:35 pm
Saludos...

Tengo tres campos de texto dinámico:
El primer campo de texto dinámico contiene una información que se carga desde un archivo .txt. (se trata de un número a modo n,nn).
El segundo campo de texto dinámico contiene una información que es fija y previamente se ha incluído (se trata de un número con decimales a modo nn,nn).
El tercer campo de texto dinámico debería contener el valor matemático resultado de los dos anteriores campos dinámicos. Para ser más explícito debe ser la división del segundo campo entre el primero.
Yo he nombrado los campos en instancias y variables como se debe hacer. He incluído una paequeña formula que es la que más me resulta (aunque me sale el tal NaN):

loadVariablesNum("archivo.txt", 0);
CD3 = (Number(CD2.text))/Number((CD1.text)); // CD son las siglas de Campo Dinámico.

El problema es que me sigue saliendo ese tal "NaN" y no hay manera de que me salga un resultado. En qué estoy fallando?...

Gracias por vuestra ayuda y coloaboración....

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 May 2006 04:45 pm

andrewp escribió:

(se trata de un número a modo n,nn).


recuerda que flash trabaja con punto en vez de coma como separador decimal ;)

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 22 May 2006 09:07 pm
Gracias Maikel... Ya había cambiado esto pensando en que depronto no me los aceptase... Desafortunadamente me sigue mostrando el error NaN.
En mi .txt tengo lo siguiente: &numero=1.20& También lo he puesto así: numero=1.20

Mi campo de texto dinámico que tiene otro valor esta a manera de 240.50

La verdad no sé en qué estoy fallando... Si me podéis ayudar, quizá con otra manera de hacer operaciones aritméticas, os lo afradeceré un montón.

Saludos!... :(

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 May 2006 09:15 pm
Podrias compartir el FLA? para revisar como lo tienes estructurado?

Por DaHouseCat

Claber

1011 de clabLevel

2 tutoriales

Genero:Masculino  

Smarphones Fan Boy

firefox
Citar            
MensajeEscrito el 22 May 2006 09:33 pm
Vale!... Y cómo puedo poner aquí el .fla y el .txt ?

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 May 2006 10:42 pm
Alguna posible respuesta a esta duda?...

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 May 2006 11:40 pm
por que no usas loadvars? , loadvariables esta desfasado y ya no se recomienda su uso, loadvars es un muy sencillo, mira te doy ejemplo:

variables.txt

Código :

&a=10&b=20&c=-100.20&d=600&e=Maikel&


actionscript

Código :

var variables:LoadVars = new LoadVars();
variables.load("variables.txt");
variables.onLoad = function (exito:Boolean){
   if (exito){
      var acum:Number = 0;
      for (var variable in this){
         if (!isNaN(this[variable])){
            acum+= Number(this[variable]);
         }
      }
      trace(acum);
   } else{
      trace("no se pudo cargar los datos");
   }
}


o si quieres acceder una a una las variables:

Código :

var variables:LoadVars = new LoadVars();
variables.load("variables.txt");


variables.onLoad = function (exito:Boolean){
   if (exito){
      var acum:Number = 0;
      acum+= Number(this.a)+Number(this.b)+Number(this.c)+Number(this.d);
      trace(acum);
   } else{
      trace("no se pudo cargar los datos");
   }
}


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 23 May 2006 12:15 am
Maikel tu ejemplo es buenísimo para cargar variables tal y como me lo explicas, dejándo de lado loadvariablesnum.
De hecho mi problema no radica en ese aspecto, pues la variable se carga perfectamente.. Incluso usando tu ejemplo también se carga sin problemas.... El problema es que en el campo de texto que debería aparacer el resultado sigue apareciendo el "NaN"...

En determinadas cuentas... Yo quiero que se cargue un .txt a mi .swf en un texto dinámico. Este .txt contiene un número que representa la tasa de cambio del dolar respecto al euro. En otro texto dinámico he incluído previamente un valor en euros. Y finalmente un tercer campo dinámico (vacío) debe mostrar el resultado de el valor en euros entre la tasa de cambio cargada en mi animación.
Por qué debo cargar un .txt?... Porque es un valor que se actualizará automáticamente en el servidor.
Por qué un precio fijo en un texto dinámico?... Porque es el valor que inicialmente verá el usuario que por defecto será Euro.

Creí que con una simple operación matemática de división se podia solucionar el tema pero veo que es más complicado de lo normal...

De cualquier manera agradezco vuestra ayuda y espero que hayan entendido mi objetivo con esto...

Saludos!...

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2006 12:32 am
mira un ejemplo:

en el txt tengo esto:
&euro=2650&dolar=2150&


y en actionscript( 5 textfields y un boton en el escenario)

Código :

var variables:LoadVars = new LoadVars();
variables.load("variables.txt");
var euro:TextField;
var dolar:TextField;
var totaleuro:TextField
var totaldolar:TextField;
var calcular:Button;

variables.onLoad = function (exito:Boolean){
   if (exito){
      euro.text = this.euro;
      dolar.text = this.dolar;
   } else{
      trace("no se pudo carga los datos");
   }
}

calcular.onRelease = function (){
   totaleuro.text = String(Number(cantidad.text)*Number(euro.text));
   totaldolar.text = String(Number(cantidad.text)*Number(dolar.text));
}


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 23 May 2006 02:35 pm
Maikel!... Sólo una cosa antes de probar tu sugerencia... la variable "cantidad.text" a qué hace referencia?... Se trata de un sexto textfield?....

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2006 02:46 pm
No, son 5 textfields, donde 4 son textos dinamicos[euro, dolar, totaleuro, totaldolar] y el 5 es de entrada de texto [cantidad].


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 23 May 2006 04:34 pm
Maikel...
He seguido los pasos que me indicas cuidadosamente y entendiendo línea por línea para asegurarme de lo que estoy haciendo.
En principio los valores puestos en el .txt los carga sin problemas y no se generan errores de ningún tipo en este aspecto. Ahora bien... una vez introduzco una cifra en el Input (cantidad) y cliqueo al botón (calcular) no se presenta nada en los campos de los resultados (totaleuro y totaldolar). Por experimentar, cambie el nombre de estos dos últimos campos de variable a instancia y se genera nuevamente el error (NaN: Not at Number)...

La verdad es que estoy un poco preocupado con este tema porque necesito terminar esto de alguna manera y me he encallado en una simple operación matemática.... Si, encambio, incluyo valores numéricos en las variables (en el mismo AS) funciona sin problemas, pero para mi es necesario sacar esos valores de un .txt para que se operacionen con los que tengo en los campos dinámicos de la animación.

No sé si estoy fallando en algo o existe otra posibilidad para poder realizar este punto... Qué me aconsejas Maykel?....

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2006 04:45 pm
Eso es porque String necesita como argumento un String
en su lugar :

Código :

totaleuro.text = (Number(cantidad.text)*Number(euro.text)).toString();
 totaldolar.text =(Number(cantidad.text)*Number(dolar.text)).toString();

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 23 May 2006 04:55 pm
Teseo String(unnumero) tambien es valido :wink:


andrewp en el panel de propiedades de los textfields usa el campo nombre de instancia y no el campo var, creo que ese es tu problema

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 23 May 2006 05:16 pm
Pues Maikel.........si y no, cuestión de orden ....constructor a asignación??

Código :

a.text = String(Number(34));
trace(a); //undefined
a.text = Number(34).toString();
trace (a); // undefined


b = String(Number(34));
trace(b); //34
b.text = Number(34).toString();
trace (b); //34

c.text = String(Number(34));
trace(c); //undefined
c = Number(34).toString();
trace (c); //34

d = Number(34).toString();
trace (d); //34
d.text = String(Number(34));
trace(d); //34

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 23 May 2006 05:26 pm

Código :

a.text = String(Number(34)); //asigna a propiedad de un TextField

trace(a); //undefined imprimes el objeto textfield¿?

a.text = Number(34).toString();  //igual

trace (a); // undefined //igual¿?





b = String(Number(34));

trace(b); //34

b.text = Number(34).toString(); // b es una variable, estas jugando con nombre iguales de objetos y variables!!!

trace (b); //34



c.text = String(Number(34)); // propiedad de textfield

trace(c); //undefined // se lo asignaste a la propiedad textfield!!

c = Number(34).toString(); // ahora es una variable ¿?

trace (c); //34 // 



d = Number(34).toString();

trace (d); //34

d.text = String(Number(34)); // estas intentando crearle una propiedad a la variable d?

trace(d); //34  d no ha desaparecido aun existe

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 23 May 2006 07:23 pm
Maykel...
Lo he revisado tal y como lo dices y todo lo tengo en instancia. Así y todo en los campos de resultado me genera el "NaN". (???)

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 May 2006 08:25 pm
UPS!!! sorry. Eso no era lo que quería mandar, es un trocito de una prueba más larga. Llamada de teléfono y envié un ejemplo "capado".
Este otro ejemplo explica mejor lo que quería expresar, que Construir una String ........a veces hace cosas como esta:

Código :

this.createTextField("a", 1, 0, 0, 100, 20);
a.text = String (Number("0")); // convierte en cadena el 0  (parece)
trace (" iniciada " +typeof(a.text));
function contar() {
   trace(typeof(a.text)+"  "+a.text);
   a.text++} // contando con una cadena ????
ID = setInterval(contar, 500);


Este código funciona. Ambas cosas, campo de texto y trace , funcionan diciendo que el contador es una cadena. Me está engañando en algo.

Pero si cambiamos la forma de definir ( esa linea solo):

Código :

this.createTextField("a", 1, 0, 0, 100, 20);
a.text = Number(0).toString; // convierte en cadena el 0  (lo hace)
trace (" iniciada " +typeof(a.text));
function contar() {
   trace(typeof(a.text)+"  "+a.text);
   a.text++} // ahora ya no cuenta, es una cadena de verdad.
ID = setInterval(contar, 500);


No funciona. Ahora ya no sirve el código...... a.text es una "verdadera" cadena luego hay una diferencia clara entre asignar con String a un Number y toString() a un Number

Eso queria decir. De nuevo pido perdón, Maikel :crap:

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 24 May 2006 08:38 am
this.createTextField("a", 1, 0, 0, 100, 20);
a.text = Number(0).toString(); // convierte en cadena el 0 (lo hace)
trace (" iniciada " +typeof(a.text));
function contar() {
trace(typeof(a.text)+" "+a.text);
a.text++} // ahora ya no cuenta, es una cadena de verdad.
ID = setInterval(contar, 500);

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 May 2006 08:45 am
Maikel!... Qué piensas si en vez de cargar un .txt cargo un .swf que contenga sólo un campo de texto con un valor incluído?.... Hice el ejemplo completo si cargar valores e insertando el "textfield" en la misma animación y se muestra el resultado sin problemas... Hice un "trace" y en este caso se generan los números que necesito. Crees que sería viable esta opción?

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 May 2006 08:47 am

andrewp escribió:

Maykel...
Lo he revisado tal y como lo dices y todo lo tengo en instancia. Así y todo en los campos de resultado me genera el "NaN". (???)


por favor, puedes postear el codigo actionscript y el contenido del txt?

duda: estas usando flash mx 2004 o superior cierto?

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 May 2006 09:18 am
Por supuesto:

var variables:LoadVars = new LoadVars();
variables.load("variables.txt");
var euro:TextField;
var dolar:TextField;
var totaleuro:TextField;
var totaldolar:TextField;
var calcular:Button;
variables.onLoad = function(exito:Boolean) {
if (exito) {
euro.text = this.euro;
dolar.text = this.dolar;
} else {
trace("no se pudo carga los datos");
}
};
calcular.onRelease = function() {
totaleuro.text = String(Number(cantidad.text)*Number(euro.text));
totaldolar.text = String(Number(cantidad.text)*Number(dolar.text));
};


Dentro del .txt:

&euro=2650&dolar=2150&


Y la versión es 8.0
[/code]

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 May 2006 09:36 am
Cierto Maikel "()" :oops: pero mi duda se sigue manteniendo pues no entiendo esto:
Este

Código :

a = String(Number("0")); 
trace (" iniciada " +typeof(a));
function contar() {trace(typeof(a)+"  "+a); a++}
ID = setInterval(contar, 500);


Entrega esta salida:
iniciada string
string 0
number 1
number 2
number 3
.........
Y este

Código :

this.createTextField("a", 1, 0, 0, 100, 20);
a.text = String (Number("0"));
trace (" iniciada " +typeof(a.text));
function contar() {trace(typeof(a.text)+"  "+a.text); a.text++}
ID = setInterval(contar, 500);

Entrega esta otra salida:
iniciada string
string 0
string 1
string 2
string 3
......

Lo primero lo comprendo........lo segundo (ese a.text++ como string) es lo que me hace pensar que ese String hace algo raro con una asignación a un TextField. ¿Cuál es la causa? :crap:

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 24 May 2006 09:37 am
A mi me funciono muy bien :crap:

Asi debe ser?



Archivos Aqui

P.D.
Confundido :crap:

Por DaHouseCat

Claber

1011 de clabLevel

2 tutoriales

Genero:Masculino  

Smarphones Fan Boy

firefox
Citar            
MensajeEscrito el 24 May 2006 10:00 am
No se si ayudará, pero si cojo el archivo FLA de DaHouseCat y lo salvo con el Flash 8, va perfectamente.
Ahora bien, lo cargo en otro ordenador y abro el FLA con Flash MX, lo ejecuto y NaN de NaN.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 24 May 2006 10:56 am
Vale!... ya he detectado mi error... Evidentemente el ejemplo de Maykel funciona bien, he cambiado algunas variables que tenía y ahora funciona de maravilla. El problema que os comento radica en que la variable "euro" no debe ser cargada de un .txt, pues es un valor fijo que debe permanecer en la animación. Ahora bien, me suena muy bien la idea de cargar este valor fijo de un .txt también, pero tendría que ser de un .txt diferente.

Explico por qué... El .txt que contiene "dolar" en uno solo que, en principio, será actualizado automáticamente a través del algún servicio bursátil, pues este representa el valor de cambio entre el Euro y el Dolar. Por ese motivo debe ir solo, pues servirá para muchas animaciones con diversas clases de productos.
Por su parte, el .txt que podría ser cargable (euro) debe ser único para cada producto, pues los precios son diferentes.

La pregunta, entonces, sería: De qué manera (aprovechando el ejemplo de Myikel), podría cargar los valores de dos .txt a la misma animación?... Mi conocimiento de flash, sinceramente, no me da para tanto y por eso recurro a vosotros.

Gracias por irme moldeando esta respuesta de la que he estado aprendiendo mucho!...

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 May 2006 03:36 pm

Teseo escribió:

No se si ayudará, pero si cojo el archivo FLA de DaHouseCat y lo salvo con el Flash 8, va perfectamente.
Ahora bien, lo cargo en otro ordenador y abro el FLA con Flash MX, lo ejecuto y NaN de NaN.


Si es Flash Mx(ojo Mx, no Mx 2004), es comprensible porque loadvars funciona diferente alli.

andrewp pregunto de nuevo, que flash estas usando?

Si puedes haz lo que hizo DaseHouseCat sube el .fla, aunque no lo vi completo, solo pase un momento, mas tarde sigo revisando mejor que estoy mas libre.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 May 2006 06:40 pm
un ejemplo mas "completo", el txt es el mismo contenido, sirve en flash mx 2004 y 8, sino te funciona revisa las opciones de publicacion pestaña flash y verifica en que player estas exportando la pelicula, debe ser el player 7 u 8 con actionscript 2.0

Código :

var variables:LoadVars = new LoadVars();
variables.load("variables.txt");

this.createTextField("euro",this.getNextHighestDepth(),120,100,100,18);
this.createTextField("dolar",this.getNextHighestDepth(),120,120,100,18);
this.createTextField("totaleuro",this.getNextHighestDepth(),240,100,100,18);
this.createTextField("totaldolar",this.getNextHighestDepth(),240,120,100,18);
this.createTextField("cantidad",this.getNextHighestDepth(),0,109,100,18);

var calcular:MovieClip = createEmptyMovieClip("calcular",this.getNextHighestDepth());

with (calcular){
   _x=150;
   _y= 150;
   beginFill("0x00000",100);
   lineTo(100,0);
   lineTo(100,20);
   lineTo(0,20);
   endFill();
}




cantidad.border= true;
cantidad.type = "input";
euro.border= true;
euro.selectable = false;
dolar.border = true;
dolar.selectable = false;
totaldolar.border = true;
totaldolar.selectable = false;
totaleuro.border = true;
totaleuro.selectable = false;

variables.onLoad = function(exito:Boolean) {
if (exito) {
euro.text = this.euro;
dolar.text = this.dolar;
} else {
trace("no se pudo carga los datos");
}
};
calcular.onRelease = function() {
   totaleuro.text = String(Number(cantidad.text)*Number(euro.text));
   totaldolar.text = String(Number(cantidad.text)*Number(dolar.text));
};

________________________________________________________________________

Teseo lee bien tu código y veras la respuesta del por qué dice Number y String.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 May 2006 07:58 pm
:D Okey Maykel!!!! ...
He entendido tus códigos perfectamente y con tu último codigo he podido desaroolar finalmente lo que necesitaba. Había posteado una sola variable para no liar más el tema, auqnue en realidad necesito trabajar con más variables, es decir, euro, dolar, pound y yen.

Basado en todo lo que me has enseñado en este largo POST he hecho lo siguiente:

En un archivo llamado divisas.txt he puesto la siguiente línea:

Código :

&euro=1&dolar=1.20&pound=0.6825&yen=143.75&


Estos valores representan la tasa de cambio del euro respecto a las monedas mencionadas.

En mi código AS he puesto lo siguiente:

Código :

var variables:LoadVars = new LoadVars();
variables.load("divisas.txt");
var euro:TextField;
var dolar:TextField;
var pound:TextField;
var yen:TextField;
var totaleuro:TextField;
var totaldolar:TextField;
var totalpound:TextField;
var totalyen:TextField;
var euro_btn:Button;
var dolar_btn:Button;
var pound_btn:Button;
var yen_btn:Button;
variables.onLoad = function(exito:Boolean) {
   if (exito) {
      euro.text = this.euro;
      dolar.text = this.dolar;
      pound.text = this.pound;
      yen.text = this.yen;
   } else {
      trace("Isn't possible loading data");
   }
};
onEnterFrame = function () {
   totaleuro.text = String(Number(cantidad.text)*Number(euro.text));
   totaldolar.text = String(Number(cantidad.text)*Number(dolar.text));
   totalpound.text = String(Number(cantidad.text)*Number(pound.text));
   totalyen.text = String(Number(cantidad.text)*Number(yen.text));
};


Este código funciona perfectamente, aunque he variado dos cosillas muy sencillas y sin mayor complicación: En véz de ser un botón que ordena realizar las operaciones, estas se realizan al entrar el frame y la evidente adición de otras variables para mostrar el cambio directamente.

Ahora me he topado con un problema que es menos engorroso pero necesario para "redondear" el tema... No sé de qué manera puedo redondear los valores que me genera el código, pues me los genera a modo nn,nnnnnnn ó nn,n y necesito máximo y mínimo dos digitos que en mi caso señalan los céntimos. He intentado insertar en el anterior código la variable Math.round pero me genera toda una serie de errores.
En otros post he visto una solución bastante "chapuza" que modifica el valor a través de una multiplicación por cien, la posterior variable del resultado por Math.round, la resta del último resultado por (-1) y la final división entre 100.

Supongo que después de sacar todo el tinglado anterior debe existir una variable más sencilla para redondear los valores... No crees?...

Finalmente quiero agradecer tu amable colaboración en el tema del que he aprendido un montón. Gracias! por todo...

Por andrewp

54 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 May 2006 01:30 am
lo de redondear y truncar decimales ya se ha discutido mucho en el foro, y se han posteado muchas funciones que sirven para eso, flash no dispone una propia.

Ahora te sugiero que leas sobre onChanged de la clase textfield en la ayuda de flash, y no uses onEnterFrame para lo que estas haciendo.


saludos.

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

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