Conversión entre tipos de datos

Conversión implicita de tipos

Observemos la siguiente secuencia:

var var1 = “75”;
var var2 = 25;
var var3, var4;
var3 = var1 + var2;
var4 = var2 + var1;

Las varibles var3 y var4 contienen ¿números o textos? Cuando se suman cadenas de texto con cualquier otra cosa, los otros tipos de datos se convierten en cadenas de texto. Pero si restamos, multiplicamos o dividimos “cadenas de texto”, ¿sucede lo mismo?.

Vamos a descubrirlo en los siguientes programas, como es habitual cargamos nuestro editor de texto favorito y escribimos nuestro programa que guardaremos como prog010.html.

Vemos las variables asignadas.

Si sumamos dos cadenas (aunque contengan números) de texto se produce la concatenación (unión) de los dos textos.

En cambio, si multiplicamos (o hacemos cualquier operación aritmética que no sea la suma), dos cadenas de texo que en realidad contienen números, se produce una conversión implícita de las cadenas a números y aparece el producto aritmético de los números.

¿Qué pasaría si introducimos los dos números a través de la función prompt?

Escribe el siguiente programa en tu editor y guardalo como prog011.html.

Si lo ejecutamos vemos que no funciona como deseamos debido a que el resultado de un prompt, siempre es una cadena de texto.

Entonces ¿como conseguimos sumar en JavaScript?

Conversión explícita de tipos

Tenemos tres comandos que nos permitirá pasar los números de texto en números operativos.

  1. parseFloat(cadena).- Convierte la “cadena” y la transforma en un número en coma flotante, si es posible.parseFloat (“123.456”) = 123.456
    parseFloat (“123ABC”) = 12
  2. parseInt(cadena, número).- Devuelve números enteros, el segundo argumento nos permite escoger la base de numeración (entre 2 y 36)parseInt (“ABC”,16) = 2748
    ABC 16 = 2748 10Si no especificamos el segundo argumento, por defecto es 10.
    Si la cadena empieza por 0x y no existe el segundo argumento, se entiende que es 16.
    Si la cadena empieza por 0 y no existe el segundo argumento, se entiende que es 8.
  3. toString(argumento).- Si argumento = número Devuelve una cadena que contiene el número. Puede haber un argumento opcional:

Vamos a probar lo estudiado arriba; sumaremos los números introducidos desde el teclado con el prompt.

Ejecútalo, utilizando números enteros, naturales y decimales. El resultado desglosado es el siguiente:

Declaramos las dos variables que se utilizaran para la entrada de datos desde el teclado…

… y hacemos la llamada para introducir el primer número desde el teclado que se almacenará en la variable num1

… seguidamente este número introducido de texto, pasará a ser una variable numérica.

Para el segundo número introducido el programa sigue los mismos pasos con la variable num2 introducida.

Con la conversión de las variables introducidas desde el teclado vemos el resultado:

A partir de este momento hemos de tener claro si los “prompts” corresponden a números enteros, decimales o de texto, especificandolo en la entrada del primer argumento para que sepamos que debemos introducir:

  • Si “x” ha de ser un número entero escribiremos.- x = parseInt(prompt(“Escribe un número entero”, “”));
  • Si “x” ha de ser un número decimal escribiremos.- x = parseInt(prompt(“Escribe un número entero o decimal”,””));
  • Si “x” ha de ser una cadena de texto escribiremos.- x = prompt(“Escribe el texto correspondiente”,””);

Ya que el movimiento se demuestra andando, escribe el siguiente programa, ya sabes en tu editor bla bla bla, y guardalo con el nombre prog012b.htm:

Vamos a ejecutarlo:

Declaramos dos variables x e y:

Introducimos un número entero que se le asignara a la variable x:

Introducimos un segundo número entero que se le asignara a la variable y:

Por último muestra el resultado:

En el ejercicio prog007.htm (enlace por si lo quieres repasar) habíamos visto una forma de convertir un número en base 8 o base 16 en base 10. Pero dichos números debíamos de escribirlos implícitamente, es decir en el programa. Nos gustaría hacer un programa que:

  • Nos preguntara un número en base 16 (prompt)
  • Nos diera como resultado el número anterior pero en base 10

Escribe en tu editor de texto favorito el siguiente programa y guardalo como prog012bb.html, así veremos como se hace.

Ejecútalo y escribe un número hexadecimal por ejemplo “D0C2”, a ver si es verdad que nos da “53442” como resultado.

Observa el funcionamiento del programa prog012bb.htm:

Lo que escribamos (un número en base 16), se guardará en la variable m como texto (ya que no hemos puesto ningún parseInt ni parseFloat).

La variable n guardará el número en base 10 y parseInt(cadena, 16), transforma la cadena en un número de base 16, en el correspondiente formato numérico pero en base decimal.

Probaremos este proceso haber si funciona para cualquier otra base numérica…

Observa estos dos ejemplos gráficos de conversión numérica para que lo entiendas un poco:

Ejecutamos el listado prog012bbb.html.

Vaidamos el número pulsando el botón OK.

Después de pulsar el último botón OK, vemos el resultado de la conversión.

¿Y al contrario? para pasar un número decimal a base 6 observa este ejemplo gráfico:

  • Observando el ejemplo de arriba; ¿serías capaz de convertir el número decimal 150 a su equivalente en base 4?

Veamos el listado equivalente:

Cuyo resultado es: