Java | Mein Double rechnet 5/2 und es kommt 2.0 raus obwohl es ja 2.5 sind | Was ist da falsch?
5 Antworten
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.
Könnte man, erfordert aber unnötigerweise ein weiteres Casting von float zu double.
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
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).
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.
oder einfach 5f und 2f