Actionscript 2.0: Problemas al pasar de texto a número

Actionscript 2.0: Problemas al pasar de texto a número

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:

  1.  
  2. var cadena:String = "033";
  3. var numero:Number = Number(cadena);
  4. trace(numero);
  5.  

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:

  1.  
  2. var cadena:String = "033";
  3. while(cadena.substr(0,1) == 0){ 
  4. 	cadena = cadena.substr(1,cadena.length-1); 
  5. }
  6. var numero:Number = Number(cadena);
  7. trace(numero);
  8.  

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:

  1.  
  2. var cadena:String = "033";
  3. var numero:Number = parseInt(cadena,10);
  4. trace(numero);
  5.  

Devuelve 33.

Por último, comentar que esto solo ocurre en Actionscript 2.0. Según la ayuda de Flash:

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.

Comentarios
    • Autor
    • Iván
    Ni en 1000 años lo habría descubierto. Yo habría hecho lo que tu, quitarle los ceros ;)
    • Autor
    • Gauden
    Yo diría que ni en un millón de años ... ni los ceros habría quitado jajajaj habría sufrido por años con esto... jajaja
    • Autor
    • CHRISTIAN
    PUES YO HICE LA PRUEBA CON var cadena:String = "033"; var numero:Number = Number(cadena); trace(numero); El ejemplo que dices que devuelve 27 y nop.... me debolvio 033 talves es un error en tu instalacion del flash o algo asi
    • Autor
    • esedeerre

    @Christian

    El ejemplo es de Actionscript 2.0. ¿Estás publicando tú para Actionscript 2.0 0 3.0?

    No es un error de "mi flash", es un comportamiento reportado en la ayuda...

    • Autor
    • otro_que_pasaba
    Yo estoy de acuerdo con Christian, no creo que sea error de su flash... es un error de su windows, seguro. Mejor que formatees Christian jajajaja
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: