Double-Zahlen auf Intervalle runden

Michel95

Mitglied
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:

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!
 

cklisch

Mitglied
Der Fehlerursprung ist die Fließkommazahl. Evtl. musst du den Datentyp wechseln, um diese Nachkommafehler nicht zu erhalten. Versuch mal BigDecimal.
 
S

Spacerat

Gast
Evtl. bietet "String.format()" die richtigen Möglichkeiten dafür wenn man die Anzahl der Vor- und Nachkommastellen festlegt. z.B. "String.format("%1.2f", 0.60000001)"
 

Michel95

Mitglied
Danke für deine Antwort, ich weiß noch nicht genau, wo ich jetzt den DigDecimal einbauen soll.
Dashier ist mein Code:

Java:
g.drawLine(0, (int) delta.y, width, (int) delta.y);
			
			double anzSkalierungen = width / 1000.0; // bei 600 px 600 / 100.0 = 6 Markierungen an der Skala
			double skalierungGroesse = size.x / anzSkalierungen; // bei 6 Markierungen und Breite 20 = 20 / 6 = 3.33 Einheiten Skalierabstand
			double d = Math.abs(skalierungGroesse); // Zahl zwischen 1.0 und 10.0
			double factor = 1.0; 
			if (d < 1.0) while (d < 1.0) { d *= 10; factor *= 10; }
			else if (d > 10.0) while (d > 10.0) { d *= 0.1; factor *= 0.1; }
			d *= 0.1;
			if (d < 0.2) d = 0.1;
			else if (d < 0.5) d = 0.2;
			else if (d < 1.0) d = 0.5;
			else { d = 0.1; factor *= 0.1; }
			skalierungGroesse = d / factor;
			anzSkalierungen = size.x / skalierungGroesse;
			double x = delta.x % (skalierungGroesse * zoom.x);
			double y = delta.y;
			if (y < 5) y = 5;
			else if (y > height - 50) y = height - 50;
			double skalaWert = viewBeginn.x + x / zoom.x;
			for (int i = 0; i < anzSkalierungen; i++) {
				int lx = (int) (x + skalierungGroesse * zoom.x * i);
				g.drawLine(lx, (int) (y - 5), lx, (int) (y + 5));
				g.drawString(Double.toString(round(skalaWert, skalierungGroesse)), lx, (int) (y + 20));
				skalaWert += skalierungGroesse;
			}

Soll ich einfach mal alle double durch BigDecimal ersetzen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
A Double[] Array zahlen per Argument übergeben Java Basics - Anfänger-Themen 5
L Double Zahlen und nachkommastellen Java Basics - Anfänger-Themen 5
J Datentypen Double Zahlen. Java Basics - Anfänger-Themen 3
J Anzahl der Double Zahlen zwischen 0 und 1 Java Basics - Anfänger-Themen 14
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
O Erste Schritte Potenzmethode per double Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
B Hashing (verkettet/double) Java Basics - Anfänger-Themen 0
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
V Variablen Double später deklarieren Java Basics - Anfänger-Themen 7
V double = 1.34823e-300 Java Basics - Anfänger-Themen 5
W double*double error Java Basics - Anfänger-Themen 4
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
J [Rundungsfehler bei Double] Grundkurs Java: Checke Lösungsweg nicht Java Basics - Anfänger-Themen 1
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
T set Metode für Double Java Basics - Anfänger-Themen 6
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kommafehler beim double einleseen korrigieren Java Basics - Anfänger-Themen 2
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
K Genauer als Double? Java Basics - Anfänger-Themen 4
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
A Java Ungenauigkeit double Java Basics - Anfänger-Themen 6
B Methoden The method mirror(double[]) in the type Convolution is not applicable for the arguments (double) Java Basics - Anfänger-Themen 8
C Typumwandlung von int<-->double Java Basics - Anfänger-Themen 6
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
S Regelabfragen aus Double-Array Java Basics - Anfänger-Themen 2
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
G double in float umwandeln Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
S Datentypen double - kommastellen abschneiden Java Basics - Anfänger-Themen 6
M int double int double Graph Java Basics - Anfänger-Themen 3
K ArrayList<Double> --> double[] array Java Basics - Anfänger-Themen 5
Z Double in komma und Punkt akzeptieren -> Robusteeingabe Java Basics - Anfänger-Themen 7
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
B Datentypen Multiplzieren mit double wird ungenau Java Basics - Anfänger-Themen 4
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
F Double neu formatieren mit NumberFormat Java Basics - Anfänger-Themen 2
M Double-Ausgabe in JTextField fehlerhaft Java Basics - Anfänger-Themen 2
T Problem mit double-Formatierung Java Basics - Anfänger-Themen 3
M Double Zahl in Grad Zahl Java Basics - Anfänger-Themen 7
M Datentypen Ergebniss- Double to String- wird nicht angezeigt Java Basics - Anfänger-Themen 13
S Double mithilfe eines Scanners so einlesen, dass ich damit rechnen kann Java Basics - Anfänger-Themen 4
M Die Double-Variable rundet? Java Basics - Anfänger-Themen 1
llabusch Methoden Methoden überlagern - entweder int || double Java Basics - Anfänger-Themen 10
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben