Actionscript 2.0, Flash

febrero 2009

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

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:

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:

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 = 3×8 + 3×1 = 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:

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.