2010-06-04 4 views
24

Comment divisez-vous deux entiers et obtenez une réponse double ou flottante en C?Comment obtenir des fractions dans une division entière?

+2

« décimale » est une représentation (comme « hexadécimal », « binaire » « octal ») qui applique à un nombre entier ou non entier. Vous voulez dire, je suppose, "obtenir un résultat non-entier". – leonbloy

+0

Voici comment vous obtenez des fractions (nombres rationnels) avec une division entière 'printf ("% d% d /% d "x/y, x% y, y);'. Êtes-vous sûr de ne pas vouloir un résultat non-entier? – Brendan

Répondre

41

Vous devez convertir l'un ou l'autre en float ou double.

int x = 1; 
int y = 3; 

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

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

Bien sûr, assurez-vous que vous êtes stocker le résultat de la division dans un double ou float! Cela ne vous sert à rien si vous stockez le résultat dans un autre int.


En ce qui concerne le @ commentaire du Tchad ("[tailsPerField setIntValue:tailsPer]"):

Ne pas passer un double ou flotter à setIntValue lorsque vous avez setDoubleValue, etc. disponibles. C'est probablement le même problème que celui que j'ai mentionné dans le commentaire, où vous n'utilisez pas une distribution explicite, et vous obtenez une valeur invalide parce qu'un double est lu comme un int.

Par exemple, sur mon système, le fichier:

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

sorties:

1374389535

parce que le double était tenté d'être lu comme un entier.

+0

Droite. Convertissez les entiers avant d'effectuer la division. – DOK

+0

double tp; double x; x = tn; // (tn est un int) normalement 10 tp = x/fn; // fn est aussi un int (normalement 5) mais je reçois toujours 0 –

+0

@Chad: Le code semble correct. Comment avez-vous déterminé que le résultat est zéro? Faites-vous quelque chose comme 'printf ("% d ", tp)'? Cela essaie d'imprimer le contenu d'un double comme un int, et vous n'obtiendrez pas les bons résultats. Votre compilateur aurait dû vous prévenir si vous l'aviez fait. Pour un double, la chaîne de format est '% lf'. –

3

Utiliser le moulage de type. Par exemple,

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