Programmierfrage mit int,float,double?

5 Antworten

Wenn du mit Ganzzahlen rechnest, ist das Ergebnis auch eine Ganzzahl, sprich die Nachkommastellen werden abgetrennt. Um das zu umgehen, musst du die Summe in eine Fließkommazahl umwandeln:

float notendurchschnitt = summedernoten * 1f / teilfaktor;

Siehe auch: https://www.cs.umd.edu/~clin/MoreJava/Intro/expr-int-div.html

Nebenbei bemerkt: Achte auf gute Variablenbezeichner. In Java ist die CamelCase-Notation üblich. Wähle also besser: summeDerNoten

Du rechnest mit Ganzzahlen, also wird das Ergebnis auch eine Ganzzahl sein. Die Nachkommastelle wird implizit gekonnt abgetrennt.

Entweder der Dividend oder der Divisor muss vom Typ float sein, beide wäre natürlich auch korrekt.


PWolff  18.12.2018, 19:43
Entweder der Dividend oder der Divisor muss vom Typ float sein.

Z. B. durch casten

((float)zaehler) / nenner

oder

zaehler / (float)nenner

(ich habe mir angewöhnt, einen gecasteten Ausdruck, an dem rechts noch Operatoren stehen, grundsätzlich in Klammern zu setzen, weil es mir schon zu oft passiert ist, dass dann das Casten zu spät erfolgt.)

1

19 / 8 = 2 R 3

Stimmt doch. Du dividierst hier immerhin Ganzzahlen.

Wie du sagst, ist int für Ganzzahlen.

Und wenn du summe/8 rechnest, dann ist das Ergebnis Ganzzahlig (Nachkommastellen werden dabei abgeschnitten), da es intern ein int ist.

Da du es dann in ein double speicherst, wird es zur 2.0

Wenn du willst, dass schon intern mit Komma gerechnet wird, dann caste eines der beiden erst in ein double. double > int, so rechnet er intern automatisch mit double und es kommt dein Schnitt raus ;)

also z.B.:

double durchschnitt = summe / (double) teilfaktor
Woher ich das weiß:Berufserfahrung

Du rechnest mit Ganzzahlen, also kommt auch eine Ganzzahl als Ergebnis heraus.

Spare dir diese verschiedenen Datentypen und nutze ausschließlich double für diese Aufgabe. Dann hast Du auch nicht solche Probleme.