Comunidad de diseño web y desarrollo en internet online

¿como pasar un trozo de cadena a una variable numerica?

Citar            
MensajeEscrito el 08 Feb 2009 05:00 am
saludos foro. tengo un problema con extraer parte de una cadena y meterla en una variable numérica.

Código :

var mi_cadena:String = "73300";
var mi_numero = Number(mi_cadena.substr(0, 3));
trace(mi_numero);


como ven es un codigo sencillo y nos devuelve "733" pero prueben a cambiar el primer caracter a cero ("03300" por ejemplo) y observen el resultado. Los resultados son imprededcibles. ¿porque pasa esto y como puedo solucionarlo?

muchas gracias ;)

Por Unukalhai

79 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2009 01:45 pm
y porque no haces esto:

Código ActionScript :

var mi_numero = mi_cadena.substr(0, 3);
trace(Number(mi_numero));


Supongo que así será menos impredecible.

Por esedeerre

132 de clabLevel



 

MadRid

opera
Citar            
MensajeEscrito el 08 Feb 2009 08:40 pm
agradezco tu intencion SDR pero persiste el error. prueba esto:

Código :

var mi_cadena = "03300";
var mi_numero = mi_cadena.substr(0, 3);
trace(Number(mi_numero));

es tu codigo con la declaracion de la variable tipo cadena (un strig con numeros que empiece por cero). se supone que deberia retornar '33' en lugar de '27' ¿no? ¿solo me pasa a mi? ¿podriais probarlo por favor?

en cualquier caso lo estoy solucionando con algunos parches pero me gustaria saber a que es debido este "fallo" del flash.

gracias.

Por Unukalhai

79 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2009 10:33 pm
A ver si esta solucion te sirve:

Creo que con tu otro código el número se muestra en una base no decimal, posiblemente octal, por un tema de la codificacion de los caracteres (no es un error, ni un resultado imprevisible, simplemente la representacion del numero 33 en base 8).

Prueba con este:

Código :

var mi_cadena = "03300";
var mi_numero = mi_cadena.substr(0,3);
trace(parseInt(mi_numero,10)); 


De esta forma estas forzando el resultado en decimal. Suerte!

Por Anduril

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2009 10:33 pm
Supongo que estas con Actionscritp 2.. con el 3 no tendrias ese problema:

Ayuda de Flash escribió:

En ActionScript 3.0 la función Number() ya no admite números octales ( de base 8 ). Si se suministra una cadena con un cero inicial a la función Number() de ActionScript 2.0, el número se interpreta como un número octal y se convierte en su equivalente decimal. Esto no es así con la función Number() de ActionScript 3.0, que omite el cero inicial. Por ejemplo, el código siguiente genera resultados distintos cuando se compila con versiones distintas de ActionScript:

trace(Number("044"));
// ActionScript 3.0 44
// ActionScript 2.0 36


Osea que al poner el cero delante le estas pasando un numero de base 8, para pasarlo como decimal o le quitas el cero del string o le cambias la base.

Código :

var mi_cadena = "03300";

var mi_numero = Number(mi_cadena.substr(0, 3));
trace(mi_numero); //27

var mi_numero_decimal = parseInt(mi_cadena.substr(0, 3), 10);
trace(mi_numero_decimal); //33

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

firefox
Citar            
MensajeEscrito el 08 Feb 2009 10:36 pm
Tienes razón, se vuelve meriloco si encuentra 0 al principio. No he encontrado ninguna funciñon de Flash para pasar de texto a número "en condiciones", asi que puedes quitar los 0 a mano. Te quedaria asi:

Código ActionScript :

var mi_cadena:String = "03300";
var mi_numero:String = mi_cadena.substr(0, 3);
while(mi_numero.substr(0,1) == 0){
   mi_numero = mi_numero.substr(1,mi_numero.length-1);
}
trace(Number(mi_numero));

El trace es 33.

Por esedeerre

132 de clabLevel



 

MadRid

opera
Citar            
MensajeEscrito el 08 Feb 2009 10:38 pm
Enorme explicación Zguillez. Nos hemos cruzado al postear.

Por esedeerre

132 de clabLevel



 

MadRid

opera
Citar            
MensajeEscrito el 08 Feb 2009 11:04 pm
Uh, mi respuesta es invisible?

Por Anduril

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2009 11:39 pm
gracias a todos. Que magnifica respuesta. ^^

Por Unukalhai

79 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Feb 2009 11:47 pm

Anduril escribió:

Uh, mi respuesta es invisible?

Cierto, Anduril, hemos contestado los 3 al mismo tiempo y solo he mirado un mensaje mas arriba.

Enorme tú respuestas tambien :)

Por esedeerre

132 de clabLevel



 

MadRid

opera

 

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