rir3760

Registrado: 01 Oct 2004 Mensajes: 7517 Ubicación: Mexico
| Publicado: 02/08/2012 8:25 am | | | Título: Porque la división 2 / 5 no presenta decimales |
| En C como en otros lenguajes la división entre enteros trunca, esto es, se pierde la parte decimal. Por ejemplo al ejecutar este programa:
| Código: | #include <stdio.h> #include <stdlib.h>
int main (void) { double num; num = 5 / 2; printf("%.2f\n", num); return EXIT_SUCCESS; } |
Su salida es:
Para obtener el numero preservando la parte decimal:
A) Al utilizar constantes literales al menos una de ellas debe indicar su parte decimal. Por ejemplo:
| Código: | #include <stdio.h> #include <stdlib.h>
int main (void) { printf("%.2f\n", 5.0 / 2); return EXIT_SUCCESS; } |
B) Al utilizar variables al menos una de estas debe ser de tipo "float", "double" o "long double". Por ejemplo:
| Código: | #include <stdio.h> #include <stdlib.h>
int main (void) { double cinco = 5; int dos = 2; printf("%.2f\n", cinco / dos); return EXIT_SUCCESS; } |
C) Convertir explícitamente al menos uno de los operandos al tipo "float", "double" o "long double". Por ejemplo:
| Código: | #include <stdio.h> #include <stdlib.h>
int main (void) { printf("%.2f\n", 5 / (double) 2); return EXIT_SUCCESS; } |
En todos los ejemplos la salida es la esperada: 2.50
Se recomienda declarar las variables de tipo "double" y no "float" salvo una buena razón. Ello por lo siguiente:
1) Las constantes como 3.141592 son de tipo "double". 2) Funciones variadicas como "printf" convierten sus argumentos de tipo "float" al tipo "double". 3) La mayoría de las funciones de la biblioteca estándar de C esperan argumentos de ese tipo (double). _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
|