Porque la división 2 / 5 no presenta decimales

Responder
Mensaje
Autor
Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

Porque la división 2 / 5 no presenta decimales

#1 Mensaje por rir3760 » 02/08/2012 8:25 am

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: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
   double num;
   
   num = 5 / 2;
   printf("%.2f\n", num);
   
   return EXIT_SUCCESS;
}
Su salida es:

Código: Seleccionar todo

2.00
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: Seleccionar todo

#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: Seleccionar todo

#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: Seleccionar todo

#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

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado