Java | Mein Double rechnet 5/2 und es kommt 2.0 raus obwohl es ja 2.5 sind | Was ist da falsch?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du machst eine Integer-Division und weist deren Ergebnis (einen int) an einen double zu. Daher ist das Ergebnis 2.

Um eine floating-point-Operation auszuführen, muss mindestens ein Operand auch floating-point sein. Korrekt wäre also

double test = 5.0 / 2.0;

Variablen musst Du explizit casten:

int i = 5;
int j = 2;
double test = (double)i / (double)j;
double test = 5/2;

liest der Compiler nach den Gleichheitszeichen als:

  • 5 (Integer)
  • / (Division)
  • 2 (Integer)
  • ; (-> speichern in Variable test als double).

Ist es jetzt klar?

Schreibe 5.0 statt 5 (und wahlweise 2.0 statt 2, ist aber nicht notwendig), dann werden zwei double-Typen durcheinander geteilt (bzw. bei 5.0/2 double durch int und int wird vom Compiler durch implizites Widening-Casting als double interpretiert) und du bekommst das erwartete Ergebnis.

Woher ich das weiß:Berufserfahrung – Software-Entwicklung

goldmensch409  12.08.2020, 12:04

oder einfach 5f und 2f

1
Willibergi  12.08.2020, 12:09
@goldmensch409

Könnte man, erfordert aber unnötigerweise ein weiteres Casting von float zu double.

0
ralphdieter  12.08.2020, 13:05
@Willibergi
ein weiteres Casting

höchstens beim Kompilieren. Problematischer finde ich die Ungenauigkeit bei float:

        float      |   double
1/3 = 0.3333333433 | 0.3333333333
1/5 = 0.2000000030 | 0.2000000000
1/7 = 0.1428571492 | 0.1428571429
2
Willibergi  12.08.2020, 13:46
@Niklas

Das hat ja damit nichts zu tun und ist auch nicht der Punkt. So ist es halt eine double-Variable und deshalb ist ein float-Cast überflüssig ;-) (wobei expliziter float in Java ja sowieso mittlerweile unüblich ist, wenn es nicht wirklich auf jeden Bit Speicherplatz ankommt).

0

Wird vom compiler ggf als integer interpretiert. Versuch mal 5.0/2.0

Für eine float Operation muss ein Punkt und eine Nachkommastelle nach einer der ganzen Zahlen kommen. Sprich 5/2.0 sollte es tun.

Alles korrekt. Das Resultat der ganzzahligen Division ist 2.

Wenn du keine ganzzahlige Division willst, muss einer der Operanden eben nicht ganzzahlig sein.