2010-06-04 8 views
24

Wie teilen Sie zwei ganze Zahlen und erhalten eine doppelte oder float-Antwort in C?Wie erhalten Sie Brüche in einer Ganzzahldivision?

+2

„decimal“ eine Darstellung (als „hexadezimal“, „oktal“, „binary“), das oder nicht-ganzzahlige Zahl auf ganzzahlige gilt. Du meinst, ich denke, "bekomme ein nicht ganzzahliges Ergebnis". – leonbloy

+0

So erhalten Sie Brüche (rationale Zahlen) mit ganzzahliger Division 'printf ("% d% d /% d "x/y, x% y, y);'. Sind Sie sicher, dass Sie kein nicht ganzzahliges Ergebnis wünschen? – Brendan

Antwort

41

Sie müssen den einen oder anderen zu einem float oder double gießen.

int x = 1; 
int y = 3; 

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

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

Natürlich, stellen Sie sicher, dass Sie das Ergebnis sind speichern der Teilung einer in double oder float! Es tut Ihnen nicht gut, wenn Sie das Ergebnis in einem anderen int speichern.


In Bezug auf @ Tschads Kommentar ("[tailsPerField setIntValue:tailsPer]"):

Geben Sie es nicht einen Doppel- oder schwimmen zu setIntValue wenn Sie setDoubleValue haben, etc. zur Verfügung. Das ist wahrscheinlich das gleiche Problem, das ich im Kommentar erwähnt habe, wo Sie keine explizite Umwandlung verwenden und Sie erhalten einen ungültigen Wert, weil eine Doppelung als int gelesen wird.

Zum Beispiel auf meinem System, die Datei:

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

Ausgänge:

1374389535

, weil die Doppel wurde versucht, als int gelesen werden.

+0

Rechts. Konvertieren Sie die Ganzzahlen, bevor Sie die Division durchführen. – DOK

+0

Doppel-TP; Doppel x; x = tn; // (tn ist ein Int) normalerweise 10 tp = x/fn; // fn ist auch ein int (normalerweise 5), aber ich bekomme immer noch 0 –

+0

@Chad: Der Code sieht richtig aus. Wie haben Sie festgestellt, dass das Ergebnis Null ist? Machst du etwas wie 'printf ("% d ", tp)'? Das versucht, den Inhalt eines Double als Int zu drucken, und Sie werden nicht die richtigen Ergebnisse erhalten. Ihr Compiler sollte Sie gewarnt haben, wenn Sie das getan haben. Für ein Double ist die Formatzeichenfolge% lf. –

3

Verwenden Sie Typ-Casting. Zum Beispiel ist

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