Saltar la navegación

Anexo I.- Conversión de tipos de datos en Java.

Tabla de Conversión de Tipos de Datos Primitivos
    Tipo destino
    boolean char byte short int long float double
Tipo origen boolean - N N N N N N N
char N - C C Cl Cl Cl Cl
byte N C - CI Cl Cl Cl Cl
short N C C - Cl Cl Cl Cl
int N C C C - Cl Cl* Cl
long N C C C C - Cl* Cl*
float N C C C C C - Cl
double N C C C C C C -



Explicación de los símbolos utilizados:

N: Conversión no permitida (un boolean no se puede convertir a ningún otro tipo y viceversa).
CI: Conversión implícita o automática. Un asterisco indica que puede haber posible pérdida de datos.
C: Casting de tipos o conversión explícita.

El asterisco indica que puede haber una posible pérdida de datos, por ejemplo al convertir un número de tipo int que usa los 32 bits posibles de la representación, a un tipo float, que también usa 32 bits para la representación, pero 8 de los cuales son para el exponente.

En cualquier caso, las conversiones de números en coma flotante a números enteros siempre necesitarán un Casting, y deberemos tener mucho cuidado debido a la pérdida de precisión que ello supone.

Reglas de Promoción de Tipos de Datos

Cuando en una expresión hay datos o variables de distinto tipo, el compilador realiza la promoción de unos tipos en otros, para obtener como resultado el tipo final de la expresión. Esta promoción de tipos se hace siguiendo unas reglas básicas en base a las cuales se realiza esta promoción de tipos, y resumidamente son las siguientes:

  • Si uno de los operandos es de tipo double, el otro es convertido a double.
  • En cualquier otro caso:
    • Si el uno de los operandos es float, el otro se convierte a float
    • Si uno de los operandos es long, el otro se convierte a long
    • Si no se cumple ninguna de las condiciones anteriores, entonces ambos operandos son convertidos al tipo int.
Tabla sobre otras consideraciones con los Tipos de Datos
Conversiones de números en Coma flotante (float, double) a enteros (int) Conversiones entre caracteres (char) y enteros (int) Conversiones de tipo con cadenas de caracteres (String)

Cuando convertimos números en coma flotante a números enteros, la parte decimal se trunca (redondeo a cero). Si queremos hacer otro tipo de redondeo, podemos utilizar, entre otras, las siguientes funciones:

  • Math.round(num): Redondeo al siguiente número entero.
  • Math.ceil(num): Mínimo entero que sea mayor o igual a num.
  • Math.floor(num): Entero mayor, que sea inferior o igual a num.
    double num=3.5;
    
    x=Math.round(num);    //  x = 4
    
    y=Math.ceil(num);        // y = 4
    
    z=Math.floor(num);      //  z = 3

Como un tipo char lo que guarda en realidad es el código Unicode de un carácter, los caracteres pueden ser considerados como números enteros sin signo.

 

Ejemplo:

int num;

char c;

num = (int) ‘A’;                //num = 65

c = (char) 65;                    // c = ‘A’

c = (char) ((int) ‘A’ + 1);  // c = ’B’

Para convertir cadenas de texto a otros tipos de datos se utilizan las siguientes funciones:

 

num=Byte.parseByte(cad);

num=Short.parseShort(cad);

num=Integer.parseInt(cad);

num=Long.parseLong(cad);

num=Float.parseFloat(cad);

num=Double.parseDouble(cad); 

Por ejemplo, si hemos leído de teclado un número que está almacenado en una variable de tipo String llamada cadena, y lo queremos convertir al tipo de datos byte, haríamos lo siguiente:

byte n=Byte.parseByte(cadena);