gratiszona

javascript: conversion entre tipos

8.- Conversion entre tipos de datos
  • Conversion implicita de tipos
Observa: var var1 = '75';
var var2 = 25;
var var3, var4;
var3 = var1 + var2;
var4 = var2 + var1;
Las varibles var3 y var4 contienen ¿numeros 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.
  • Escribe el siguiente programa:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
// PROG010.HTM
var num1='30';
var num2='15';
// Observa que definimos dos cadenas de texto
alert('30+15= '+(num1+num2));
alert('30*15= '+(num1*num2));
</SCRIPT>
</HTML>
  • Graba el programa en TuCarpeta con el nombre Prog010.htm
  • Ejecutalo.
  • La conclusion esta clara:
  • Si sumamos dos cadenas (aunque contengan numeros) de texto se produce la concatenacion (union) de los dos textos.
  • Si multiplicamos (o hacemos cualquier operacion aritmetica que no sea la suma), dos cadenas de texo que en realidad contienen numeros, se produce una conversion implicita de las cadenas a numeros y aparece el producto aritmetico de los numeros.
  • ¿Que sucede si introducimos dos numeros a traves de la funcion prompt?. Vamos a verlo:
  • Escribe el siguiente programa:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
//PROG011.HTM
var num1,num2;
num1=prompt('Escribe un numero','');
num2=prompt('Escribe otro numero','');
alert('La suma es ='+(num1+num2));
</SCRIPT>
</HTML>
  • Grabalo en TuCarpeta, con el nombre Prog011.htm
  • Ejecutalo. No funciona como deseamos debido a que el resultado de un prompt, siempre es una cadena de texto.
El problema que tenemos pendiente, es ¿como sumar en JavaScript?
  • Conversion explicita de tipos
parseFloat(cadena)
Toma la 'cadena' y la transforma en un numero en coma flotante, si es posible.
parseFloat ('123.456') = 123.456
parseFloat ('123ABC') = 123
parseFloat ('ABC') = NaN
parseInt(cadena, numero)
Devuelve numeros enteros, el segundo argumento nos permite escoger la base de numeracion (entre 2 y 36)
parseInt ('ABC',16) = 2748 ABC16 = 274810
Si 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
toString(argumento)
Si argumento = numero
Devuelve una cadena que contiene el numero
Puede haber un argumento opcional:
(13).toString(16) ="d" siendo 1310 = d16
(13).toString(2) = "1101" siendo 1310 = 11012
  • Vamos a hacer un programa que sume numeros en JavaScript. Escribe:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
//PROG012.HTM
var num1,num2;
num1=prompt('Escribe un numero','');
num1=parseFloat(num1);
num2=prompt('Escribe otro numero','');
num2=parseFloat(num2);
alert('La suma es ='+(num1+num2));
</SCRIPT>
</HTML>
  • Grabalo en TuCarpeta con el nombre Prog012.htm
  • Ejecutalo, utilizando numeros enteros, naturales y decimales.
A partir de este momento hemos de tener claro si los "prompts" corresponden a numeros enteros, decimales o de texto:
  • Si "x" ha de ser un numero entero escribiremos:
x = parseInt(prompt("Escribe un numero entero",""));
  • Si "x" ha de ser un numero decimal escribiremos:
x = parseInt(prompt("Escribe un numero entero o decimal",""));
  • Si "x" ha de ser una cadena de texto escribiremos:
x = prompt("Escribe el texto correspondiente","");
  • Escribe el siguiente programa:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
// Prog012b.htm
var x,y;
x=parseInt(prompt('Escribe un entero ',''));
y=parseInt(prompt('Escribe otro entero ',''));
alert('La suma de '+ x +' + ' + y +' es =' + (x+y) +'\n'+
'El producto de '+ x +' y '+ y +' = '+(x*y)+'\n'+
'El promedio de '+ x +' y '+ y +' es '+ (x+y)/2);
</SCRIPT>
</HTML>
  • Grabalo con el nombre Prog012b.htm y ejecutalo.
En el ejercicio Prog007.htm habiamos visto una forma de convertir un numero en base 8 o base 16 en base 10. Pero dichos numeros debiamos de escribirlos implicitamente, es decir en el programa. Nos gustaria hacer un programa que:
  • Nos preguntara un numero en base 16 (prompt)
  • Nos diera como resultado el numero anterior pero en base 10
Vamos a ver si lo conseguimos:
  • Escribe:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
// Prog012bb.htm
var m,n,x;
m=prompt('Escribe un numero en base 16','');
n=parseInt(m,16);
alert('El numero '+m+' en base 16, es igual a '+n+' en base 10');
</SCRIPT>
</HTML>
  • Grabalo con el nombre Prog012bb.htm en TuCarpeta y ejecutalo para el numero "FF32", a ver si es verdad que nos da "65330" como resultado.
Observa el funcionamiento del programa Prog012bb.htm:
  • m = prompt("Escribe un numero en base 16", "")
Lo que escribamos (un numero en base 16), se guardara en la variable "m" como texto (ya que no hemos puesto ningun "parseInt" ni "parseFloat").
  • n =parseInt(m,16)
La variable "n" guardara el numero en base 10
Es decir: parseInt(cadena, 16), transforma la "cadena", en nuestro ejemplo un numero escrito en base 16, en el correspondiente numero (no cadena) pero en base decimal.
Vamos a ver si el procedimiento sirve para cualquier otra base...
Antes de todo veamos unos cuantos numeros en diferentes bases:
367 = 6 + 3.7 = 27 en base 10
1234 = 3 + 2.4 + 1.42 = 27 en base 10
51346 = 4 + 3.6 + 1.62 + 5.63 = 1138 en base 10
  • Escribe:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
// Prog012bbb.htm
var m7,n7;
var m4,n4;
var m6,n6;
m7=prompt('Escribe un numero en base 7','');
n7=parseInt(m7,7);
m4=prompt('Escribe un numero en base 4','');
n4=parseInt(m4,4);
m6=prompt('Escribe un numero en base 6','');
n6=parseInt(m6,6);
alert('El numero '+m7+' en base 7, es igual a '+n7+' en base 10\n'+
'El numero '+m4+' en base 4, es igual a '+n4+' en base 10\n'+
'El numero '+m6+' en base 6, es igual a '+n6+' en base 10');
</SCRIPT>
</HTML>
  • Grabalo con el nombre Prog012bbb.htm y ejecutalo, probandolo con los numeros anteriores.
Veamos el problema inverso: dado un numero en base 10, nos interesa convertirlo a base 7, por ejemplo.
Matematicamente:
Sea 593 un numero en base 10

59310 = 15057 , porque:
En JavaScript deberiamos hacerlo de la siguiente forma, escribe:
<HTML>
<SCRIPT LANGUAGE='JavaScript'>
// Prog012bbbb.htm
var m,n;
n=parseInt(prompt('Escribe un numero entero en base 10',''));
m=(n).toString(7);
alert('El numero '+n+' en base 10, es igual a '+m+' en base 7');
</SCRIPT>
</HTML>
Anterior: contadores
Siguiente: operadores en javascript

Tal vez te interese sobre javascript: