ich rechne zum Beispiel 0.1 + 1.1 und daraus kommt dann 1.200...01 raus... auch, wenn ich mal 10 und dann (int) und dann wider durch 10 rechne, bleiben z.B. bei 0.1 + 4.1 ein paar Kommazahlen dran... wieso passiert sowas?
float
und double
nur "Annaehrungen" an den Wert den man eigentlich will, deswegen sollte man auch fuer Rechnungen wo man keine Rundungsfehler erlauben kann (Geld zum Beispiel) BigDecimal
verwenden.deswegen sollte man auch fuer Rechnungen wo man keine Rundungsfehler erlauben kann (Geld zum Beispiel)BigDecimal
verwenden.
Wenn Du mit Gleitkommazahlen arbeitest: die Ausgabe entsprechend formatieren, z. B. liefertund was kann ich dagegen machen?
double x = 1.1 + 0.1;
NumberFormat nf = NumberFormat.getInstance(Locale.US); // falls man den Punkt als Dezimaltrenner will
System.out.println(nf.format(x));
1.2
.System.out.printf("%.2f", x);
1.20
ich brauche diese Zahl halt zum Rechnen...Wenn Du mit Gleitkommazahlen arbeitest: die Ausgabe entsprechend formatieren, z. B. liefert
als AusgabeJava:double x = 1.1 + 0.1; NumberFormat nf = NumberFormat.getInstance(Locale.US); // falls man den Punkt als Dezimaltrenner will System.out.println(nf.format(x));
1.2
.
Will man dagegen z. B. fix zwei Nachkommastellen, kann man String.format (bzw. printf) verwenden.
liefertJava:System.out.printf("%.2f", x);
1.20
Das kommt darauf an, was und wie viel Du rechnest.ich brauche diese Zahl halt zum Rechnen...
Wie gesagt: normal spielt das keine Rolle. Wenn Du ein Zwischenergebnis ein klein wenig korrigieren willst:aber eigentlich brauche ich nur 1 Nachkommazahl
double x = 1.1 + 0.1;
double y = ((int)(x * 100)) / 100.0;
System.out.println(x);
System.out.println(y);
System.out.println(10/x);
System.out.println(10/y);
NumberFormat nf = NumberFormat.getInstance(Locale.US); // falls man den Punkt als Dezimaltrenner will
System.out.println(nf.format(10/x));
System.out.println(nf.format(10/y));
m += magnification;
m = (int) (m*100);
m/=100;
aber ich brauche einen booleanWie gesagt: normal spielt das keine Rolle. Wenn Du ein Zwischenergebnis ein klein wenig korrigieren willst:
Java:double x = 1.1 + 0.1; double y = ((int)(x * 100)) / 100.0; System.out.println(x); System.out.println(y); System.out.println(10/x); System.out.println(10/y); NumberFormat nf = NumberFormat.getInstance(Locale.US); // falls man den Punkt als Dezimaltrenner will System.out.println(nf.format(10/x)); System.out.println(nf.format(10/y));
Nachtrag: Ausgabe durch 10/x bzw. 10/y ersetzt.
Du siehst, der Fehler ist minimal und bei einer formatierten Ausgabe, kommt das gleiche raus.
Jetzt red mal Klartext: was hast Du vor, wo liegt das Problem?aber ich brauche einen boolean
danke, dass hat funktioniertVerwende int, zähl jeweils +1 dazu. Sobald du den Wert irgendwo brauchst, dividiere durch 10.0 oder 10d (damit wird der Int-Wert vorher nach double konvertiert und du erhälst deine Nachkommastellen).
Oder eben arbeite wie oben beschrieben mit BigDecimal.