C Conversión de tipo
Conversión de tipo
A veces, es necesario convertir el valor de un tipo de datos a otro tipo. Esto se conoce como conversión de tipo.
Por ejemplo, si intenta dividir dos números enteros, 5
por 2
, esperaría que el resultado será 2.5
. Pero como estamos trabajando con números enteros (y no con valores de punto flotante), el siguiente ejemplo simplemente generará 2
:
Para obtener el resultado correcto, necesita saber cómo funciona la conversión de tipos.
Hay dos tipos de conversión en C:
- Conversión implícita (automáticamente)
- Conversión explícita (manualmente)
Conversión implícita
El compilador realiza automáticamente la conversión implícita cuando asignas un valor de un tipo a otro.
Por ejemplo, si asigna un valor int
a un tipo float
:
Ejemplo
// Conversión automática: int a flotante
float myFloat = 9;
printf("%f", myFloat); // 9.000000
Inténtalo tú mismo »
Como puede ver, el compilador convierte automáticamente el valor int 9
a un valor flotante de 9.000000
.
Esto puede ser arriesgado, ya que podrías perder el control sobre valores específicos en determinadas situaciones.
Especialmente si fuera al revés: el siguiente ejemplo convierte automáticamente el valor flotante 9.99
a un valor int de 9
:
Ejemplo
// Conversión automática: float a int
int myInt = 9.99;
printf("%d", myInt); // 9
Inténtalo tú mismo »
¿Qué pasó con .99
? ¡Es posible que queramos esos datos en nuestro programa! Así que ten cuidado. Es importante que sepas cómo funciona el compilador en estas situaciones, para evitar resultados inesperados.
Como otro ejemplo, si divides dos números enteros: 5
por 2
, sabrás que la suma es 2.5
. Y como sabes desde el principio de esta página, si almacenas la suma como un número entero, el resultado solo mostrará el número 2
. Por lo tanto, sería mejor almacenar la suma como un float
o un double
, ¿verdad?
¿Por qué el resultado es 2.00000
y no 2.5
? Bueno, es porque 5 y 2 siguen siendo números enteros en la división. En este caso, deberá convertir manualmente los valores enteros a valores de punto flotante (vea abajo).
Conversión explícita
La conversión explícita se realiza manualmente colocando el tipo entre paréntesis ()
delante del valor.
Considerando nuestro problema del ejemplo anterior, ahora podemos obtener el resultado correcto:
Ejemplo
// Conversión manual: int a float
float sum = (float) 5 / 2;
printf("%f", sum); // 2.500000
Inténtalo tú mismo »
También puedes colocar el tipo delante de una variable:
Ejemplo
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%f", sum); // 2.500000
Inténtalo tú mismo »
Y como aprendiste sobre la "precisión decimal" en el capítulo anterior, puedes hacer que el resultado sea aún más limpio eliminando los ceros adicionales (si lo deseas):
Ejemplo
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%.1f", sum); // 2.5
Inténtalo tú mismo »
Ejemplo de la vida real
Aquí hay un ejemplo de la vida real en el que creamos un programa para calcular el porcentaje de la puntuación de un usuario en relación con la puntuación máxima en un juego:
Ejemplo
// Establece la puntuación máxima posible en el juego en 500
int maxScore = 500;
// La puntuación real del usuario
int userScore = 420;
/* Calcula el porcentaje de la puntuación del usuario en relación a la puntuación máxima disponible.
Convierta userScore a flotante para asegurarse de que la división sea precisa */
float percentage = (float) userScore / maxScore * 100.0;
// imprimir el porcentaje
printf("User's percentage is %.2f", percentage);
Inténtalo tú mismo »