int x = 1; int y = 9; System.out.println( Math.sqrt( x/y ) );
0.0
Der "Trick" bei dieser Frage ist, dass die Division von x
durch y
bei der Auswertung der Anweisung zuerst erfolgt. Da sowohl x
als auch y
Integer sind, wird eine Ganzzahldivision durchgeführt und das Ergebnis ist der Integer 0.
Als nächstes wird der Integer 0 in 0.0 mit doppelter Genauigkeit konvertiert und es ist dieser Wert, der an sqrt()
geschickt wird, die 0.0 als Ergebnis berechnet.
Obwohl es eine Fangfrage war, tritt diese Situation naturgemäß häufig in Programmen auf, und wir sollten damit richtig umgehen können.
Korrigiert das Folgende das Problem?
int x = 1; int y = 9; System.out.println( Math.sqrt( (double)x/y ) );