Hallo,
Ich programmiere gerade an einem Funktionsplotter in Java, und ich möchte an der x- und y-Achse eine Skala anzeigen, das heißt einfach gesagt ich habe einen Sichtbereich von z.B. -3.0 bis 3.0 und einen Intervall von 0.5, die Zahlen die ich dann schrittweise berechne wären in diesem Fall -3.0, -2.5, ... 0.0, ... 2.5, 3.0.
Das ganze kann ich rein- und rauszoomen, dabei wird der Intervall immer so berechnet, dass es eine "glatte" Zahl, z.B 0.2 ergibt.
Soweit funktioniert alles super, nur wenn ich die Skalabeschriftung auf den Bildschrim zeichne, tauchen dabei manchmal fehlerhafte Zahlen auf, die sehr unschön aussehen. Statt 0.6 erscheint manchmal 0.6000000000000001, wahrscheinlich aufgrund von kleinen Rechenfehlern. Oder statt 10.0 erscheint der Wert 9.999999999999999.
Ich habe schon versucht, mir mit einer round() Methode zu helfen, die auf die Intervalle rundet:
Leider liefert die Methode auch solche krummen werte.
Ich habe auch versucht mit Decimal Format zu formatieren, aber habe auch keine Ergebnisse hinbekommen. Gibt es irgendeine saubere Methode, um die Double-Zahlen auf Intervalle zu runden, das heißt bei einem Intervall von 0.2 soll die Zahl 0.6000000000000001 auf 0.6 abgerundet werden?
Ich wäre sehr dankbar für eine hilfreiche Antwort!
Ich programmiere gerade an einem Funktionsplotter in Java, und ich möchte an der x- und y-Achse eine Skala anzeigen, das heißt einfach gesagt ich habe einen Sichtbereich von z.B. -3.0 bis 3.0 und einen Intervall von 0.5, die Zahlen die ich dann schrittweise berechne wären in diesem Fall -3.0, -2.5, ... 0.0, ... 2.5, 3.0.
Das ganze kann ich rein- und rauszoomen, dabei wird der Intervall immer so berechnet, dass es eine "glatte" Zahl, z.B 0.2 ergibt.
Soweit funktioniert alles super, nur wenn ich die Skalabeschriftung auf den Bildschrim zeichne, tauchen dabei manchmal fehlerhafte Zahlen auf, die sehr unschön aussehen. Statt 0.6 erscheint manchmal 0.6000000000000001, wahrscheinlich aufgrund von kleinen Rechenfehlern. Oder statt 10.0 erscheint der Wert 9.999999999999999.
Ich habe schon versucht, mir mit einer round() Methode zu helfen, die auf die Intervalle rundet:
Java:
public double round(double value, double intervall) {
double d1 = value / intervall;
long anz = Math.round(d1);
System.out.println(anz * intervall);
return anz * intervall;
}
Leider liefert die Methode auch solche krummen werte.
Ich habe auch versucht mit Decimal Format zu formatieren, aber habe auch keine Ergebnisse hinbekommen. Gibt es irgendeine saubere Methode, um die Double-Zahlen auf Intervalle zu runden, das heißt bei einem Intervall von 0.2 soll die Zahl 0.6000000000000001 auf 0.6 abgerundet werden?
Ich wäre sehr dankbar für eine hilfreiche Antwort!