2010-06-04 17 views
24

¿Cómo se dividen dos enteros y se obtiene una respuesta doble o flotante en C?¿Cómo obtener fracciones en una división entera?

+2

"decimal" es una representación (como "hexadecimal", "octal", "binario") que se aplica a un entero o números no enteros. Quieres decir, supongo, "obtener un resultado no entero". – leonbloy

+0

Así es como obtienes fracciones (números racionales) con la división entera 'printf ("% d% d /% d "x/y, x% y, y);'. ¿Estás seguro de que no quieres un resultado no entero? – Brendan

Respuesta

41

Debe enviar una u otra a float o double.

int x = 1; 
int y = 3; 

// Before 
x/y; // (0!) 

// After 
((double)x)/y; // (0.33333...) 
x/((double)y); // (0.33333...) 

Por supuesto, asegúrese de que usted es almacenar el resultado de la división en un double o float! No le sirve de nada si almacena el resultado en otro int.


Respecto @ comentarios de Chad ("[tailsPerField setIntValue:tailsPer]"):

no transfiere un doble o flotar a setIntValue cuando se tiene setDoubleValue, etc. disponibles. Probablemente sea el mismo problema que mencioné en el comentario, donde no está utilizando un molde explícito, y está obteniendo un valor no válido porque un doble se está leyendo como un int.

Por ejemplo, en mi sistema, el archivo:

#include <stdio.h> 
int main() 
{ 
    double x = 3.14; 
    printf("%d", x); 
    return 0; 
} 

salidas:

1374389535

debido a que el doble se intentó leerse como un int.

+0

Derecha. Convierta los enteros antes de realizar la división. – DOK

+0

doble tp; doble x; x = tn; // (tn es un int) normalmente 10 tp = x/fn; // fn también es un int (normalmente 5) pero todavía obtengo 0 –

+0

@Chad: el código se ve bien. ¿Cómo has determinado que el resultado es cero? ¿Estás haciendo algo como 'printf ("% d ", tp)'? Eso intenta imprimir el contenido de un doble como int, y no obtendrá los resultados correctos. Su compilador debería haberle advertido si lo hizo. Para un doble de la cadena de formato es '% lf'. –

3

Utilice el tipo de fundición. Por ejemplo,

main() 
    { 
     float a; 
     int b=2, c= 3; 
     a=(float)b/(float)c; // This is type-casting 
     printf("%f",a); 
    } 
Cuestiones relacionadas