Si tenemos dos números enteros y hacemos su división, el resultado que obtenemos es otro número entero, sin decimales, aunque lo guardemos en una variable real :
float f = 5/2; /* f valdrá 2.000000 */
Esto se debe a que la operación se realiza entre números enteros, se obtiene un resultado que es un número entero, y ese valor obtenido se asigna a la variable “float”... pero ya es demasiado tarde.
Para evitar ese tipo de problemas, podemos indicar que queremos convertir esos valores a numeros reales. Cuando son números, basta con que indiquemos algún decimal:
float f = 5.0/2.0; /* ahora f valdrá 2.500000 */
y si son variables, añadiremos antes de ellas “(float)” para que las considere como números reales antes de trabajar con ellas:
float f = (float) x / (float) y;
Vamos a verlo mejor en un programa completo:
/*---------------------------*/
/* Ejemplo en C nº 11: */
/* c011.c */
/* */
/* Conversion de int a */
/* float */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
int main() {
int n1 = 5, n2 = 2;
float division1, division2;
printf("Mis numeros son %d y %d", n1, n2);
division1 = n1/n2;
printf(" y su division es %f", division1 );
division2 = (float)n1 / (float)n2;
printf(" pero si convierto antes a float: %f", division2 );
return 0;
}
que tendría como resultado
Mis números son 5 y 2 y su division es 2.000000 pero si convierto antes a float: 2.500000
De igual modo, podemos convertir un “float” a “int” para despreciar sus decimales y quedarnos con la parte entera:
/*---------------------------*/
/* Ejemplo en C nº 12: */
/* c012.c */
/* */
/* Conversion de float a */
/* int */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
int main() {
float x = 5, y = 3.5;
float producto;
printf("Mis numeros son %3.1f y %3.1f", x, y);
producto = x*y;
printf(" y su producto es %3.1f", producto);
printf(", sin decimales seria %d", (int) producto);
return 0;
}
que daría
Mis números son 5.0 y 3.5 y su producto es 17.5, sin decimales sería 17