Kurz vorneweg: Die Aufgabenstellung sagt erstmal nichts darüber, ob die Zahl vom Benutzer eingegeben werden soll. Vielleicht soll das am Ende so sein (und dann kann man das am Ende auch so abgeben). Aber während man entwickelt, ist es praktisch, wenn man sowas macht wie
public static void main(String[] args)
{
test(0.3);
test(0.7);
test(5.3);
test(5.7);
}
private static void test(double z)
{
System.out.println(z + " wird " + runden(z));
}
Dann brauch man das Programm einfach nur zu starten (und nicht dauernd irgendwas eintippen), und es gibt direkt aus
0.3 wird 0.0
0.7 wird 1.0
5.3 wird 5.0
5.7 wird 6.0
womit man schnell mehrere Fälle gleichzeitig ausprobieren kann, und und auf einen Blick sieht, ob alles stimmt.
Was im Moment in runden
gemacht wird, ist etwas komplizierter als es sein müßte, aber schon gar nicht so weit weg, von dem, was man braucht, wenn man das für mehrere Nachkommastellen verallgemeinern will.
Wenn man sich den Code mal anschaut…
public static double runden(double z)
{
double komma = z % 1;
komma *= 10;
if (komma < 5.0)
{
z = z - (komma / 10);
return z;
}
else
{
z = z + (1 - (komma / 10));
return z;
}
}
dann sieht man, wenn man scharf hinschaut: komma
wird mit 10 malgenommen, aber das ist nich nötig: Später wird es ja direkt wieder durch 10 geteilt, und bei der if
-Abfrage könnte man diesen Faktor auch mit reinrechnen:
public static double runden(double z)
{
double komma = z % 1;
if (komma < 0.5)
{
z = z - komma;
return z;
}
else
{
z = z + (1 - komma);
return z;
}
}
Das sieht ja schon ein bißchen einfacher aus.
Ein „Trick“ den man da anwenden kann:
- Im Moment hast du eine Funktion, die eine Zahl wie 12.345 auf eine ganze Zahl rundet.
- Was du brauchst ist eine Funktion (z.B.
runden(double z, int stellen)
die eine Zahl auf eine bestimmte Anzahl Nachkommastellen rundet.
- Diese Funktion kann man recht einfach implementieren, indem man die schon existierende funktion
runden(double z)
aufruft
Als Beispiel, wenn es z.B. eine Nachkommastelle sein solle:
- Mutlipliziere die Eingabe mit 10. Bei einer Eingabe von
12.345
wäre das dann 123.45
- Wende die
runden
-Funktion auf diese Zahl an. Das Ergebnis wäre 123.0
.
- Teile diese Zahl durch 10. Das Ergebnis wäre
12.3
.
Wenn es mehrere Stellen sein sollen, muss statt 10
etwas anderes verwendet werden. Aber als Tipp: In der Funktion runden(z, stellen)
die du schreiben musst, könnte dann eine Zeile wie
double ergebnis = runden(z * faktor) / faktor;
vorkommen…
Ein kleines Gerüst zum Testen:
public static void main(String[] args)
{
test(12.333, 1);
test(12.337, 1);
test(12.377, 1);
test(12.333, 2);
test(12.337, 2);
test(12.377, 2);
}
private static void test(double z, int stellen)
{
System.out.println(z + " auf " + stellen + " Stellen gerundet "
+ "wird " + runden(z, stellen));
}
Die Ausgabe könnte dann sein
12.333 auf 1 Stellen gerundet wird 12.3
12.337 auf 1 Stellen gerundet wird 12.3
12.377 auf 1 Stellen gerundet wird 12.4
12.333 auf 2 Stellen gerundet wird 12.33
12.337 auf 2 Stellen gerundet wird 12.34
12.377 auf 2 Stellen gerundet wird 12.38