
Etiquetas: String Number parseInt
Esta "trampa" de Flash, la descubrí la semana pasada en uno de los foros de Cristalab.
Uno de los usuarios tenia problemas al pasar Strings a números en Actionscript 2.0, siempre que los Strings tuvieran algún cero por la izquierda. Por ejemplo, si en Actionscript 2.0 hacemos:
var cadena:String = "033";
var numero:Number = Number(cadena);
trace(numero);
El trace devuelve...27.
Como ya pensaba que era alguna especie de bug maligno de Flash, de esos que surgen en los momentos de crisis y con los que pierdes una tarde tranquilamente, se me ocurrió solucionarlo eliminando los ceros iniciales con un while:
var cadena:String = "033";
while(cadena.substr(0,1) == 0){
cadena = cadena.substr(1,cadena.length-1);
}var numero:Number = Number(cadena);
trace(numero);
Devuelve 33.
Al mismo tiempo, Zguillez y Anduril encontraron la respuesta "lógica" a la maldad de Flash:
En Actionscript 2.0, si creas un número con un 0 como cifra inicial, Flash lo toma como número octal. Por eso "033" daba 27 al pasar a número:
033 = 3x8 + 3x1 = 27
Sabiendo esto, podemos convertir la cadena a entero en base 10, mediante la función parseInt, que recibe como parámetros la cadena y la base a la que queremos convertir el número:
var cadena:String = "033";
var numero:Number = parseInt(cadena,10);
trace(numero);
Devuelve 33.
Por último, comentar que esto solo ocurre en Actionscript 2.0. Según la ayuda de Flash: