25 Stimmen

Wie erhält man Brüche bei einer ganzzahligen Division?

Wie teilt man in C zwei ganze Zahlen und erhält ein Double oder Float als Ergebnis?

2 Stimmen

"Dezimal" ist eine Darstellung (wie "hexadezimal", "oktal", "binär"), die für ganzzahlige oder nicht-ganzzahlige Zahlen gilt. Sie meinen wohl "ein nicht-ganzzahliges Ergebnis erhalten".

0 Stimmen

So erhält man 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 wollen?

48voto

Mark Rushakoff Punkte 236626

Sie müssen das eine oder das andere an eine float o double .

int x = 1;
int y = 3;

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

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

Stellen Sie natürlich sicher, dass Sie die Ergebnis der Abteilung in einem double o float ! Es nützt Ihnen nichts, wenn Sie das Ergebnis in einem anderen int .


Bezüglich des Kommentars von @Chad (" [tailsPerField setIntValue:tailsPer] "):

Übergeben Sie keinen Double oder Float an setIntValue wenn Sie setDoubleValue usw. zur Verfügung. Das ist wahrscheinlich das gleiche Problem, wie ich in dem Kommentar erwähnt, wo Sie nicht mit einem expliziten Cast, und Sie erhalten einen ungültigen Wert, weil ein Double als ein int gelesen wird.

Auf meinem System ist zum Beispiel die Datei:

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

Ausgänge:

1374389535

weil versucht wurde, den double als int zu lesen.

0 Stimmen

Richtig. Konvertieren Sie die ganzen Zahlen, bevor Sie die Division durchführen.

0 Stimmen

Double tp; double x; x = tn; //(tn ist ein int) normalerweise 10 tp = x/fn; // fn ist auch ein int (normalerweise 5), aber ich erhalte immer noch 0

0 Stimmen

@Chad: Der Code sieht richtig aus. Wie haben Sie festgestellt, dass das Ergebnis Null ist? Machen Sie etwas wie printf("%d", tp) ? Damit wird versucht, den Inhalt eines Double als Int zu drucken, und Sie erhalten nicht die richtigen Ergebnisse. Ihr Compiler hätte Sie warnen müssen, wenn Sie das getan hätten. Für einen Double lautet der Formatstring %lf .

4voto

Pranav Totla Punkte 1694

Verwenden Sie den Typ-Casting-Verfahren. Zum Beispiel,

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X