kleine Kommazahlen erscheinen plötzlich

NicoHatProbleme2

Bekanntes Mitglied
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?
 

mihe7

Top Contributor
und was kann ich dagegen machen?
Wenn Du mit Gleitkommazahlen arbeitest: die Ausgabe entsprechend formatieren, z. B. liefert
Java:
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));
als Ausgabe 1.2.

Will man dagegen z. B. fix zwei Nachkommastellen, kann man String.format (bzw. printf) verwenden.
Java:
System.out.printf("%.2f", x);
liefert 1.20
 

NicoHatProbleme2

Bekanntes Mitglied
Wenn Du mit Gleitkommazahlen arbeitest: die Ausgabe entsprechend formatieren, z. B. liefert
Java:
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));
als Ausgabe 1.2.

Will man dagegen z. B. fix zwei Nachkommastellen, kann man String.format (bzw. printf) verwenden.
Java:
System.out.printf("%.2f", x);
liefert 1.20
ich brauche diese Zahl halt zum Rechnen...
 

mihe7

Top Contributor
ich brauche diese Zahl halt zum Rechnen...
Das kommt darauf an, was und wie viel Du rechnest.

Wenn Du exakte Zahlen benötigst (insbesondere Geldbeträge), nimmst Du BigDecimal.

Oft wird aber mit Gleitkommazahlen gerechnet, wenn das ausreichend genau ist. Hier muss man ein wenig aufpassen, dass sich nicht zu viele Fehler aufaddieren. Man rechnet also einfach mit den fehlerbehafteten Werten und erst, wenn es um die Ausgabe geht, wird formatiert.

Nachtrag: natürlich kannst Du zwischendrin die Fehler etwas korrigieren.

Wenn Du also ein Ergebnis auf 2 Nachkommastellen brauchst, dann spielt es keine Rolle ob die Zahl ab der 20. NkSt fehlerhaft ist. Das ist genauso, wie wenn Du mit 1/3 oder Pi in Dezimalschreibweise rechnest: nach ein paar Kommastellen hörst Du auf und rechnest mit dem Wert weiter.
 

mihe7

Top Contributor
aber eigentlich brauche ich nur 1 Nachkommazahl
Wie 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.
 

NicoHatProbleme2

Bekanntes Mitglied
bei mir macht der nach 40 mal
Java:
m += magnification;
m = (int) (m*100);
m/=100;
(...)
magnification = m;
mit m = 0.1
faxen:
1.1
(...)
4.0
4.09
4.18
4.27
usw.
 

NicoHatProbleme2

Bekanntes Mitglied
Wie 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.
aber ich brauche einen boolean
 
Y

yfons123

Gast
was willst du mit dem boolean machen ?

es gibt noch Math.Approximately falls dir das was hilft
 

NicoHatProbleme2

Bekanntes Mitglied
Entschuldigung, habe was falsches geschrieben, meint double...
Ich rechne immer, wenn ich eine Taste drücke, etwas plus 0.1, um damit eine Vergrößerung zu machen... Dafür brauche ich halt double / float...
 

Neumi5694

Top Contributor
Verwende 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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kniffel: kleine Straße Allgemeine Java-Themen 6
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
Soloeco Kleine Optimierungsfrage Allgemeine Java-Themen 6
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
D Kleine Frage zum öffnen eines Fensters Allgemeine Java-Themen 10
A Drucken auf kleine Formate Allgemeine Java-Themen 2
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
L Kleine Rekursion Allgemeine Java-Themen 12
B Kleine Frage zu Modellierung (Videothek) Allgemeine Java-Themen 2
J Eine kleine Aufnahme mit Java Allgemeine Java-Themen 3
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
Lulumann6 kleine frage zu KeyEvents Allgemeine Java-Themen 10
G Kleine Frage zu Vectoren Allgemeine Java-Themen 2
D kleine SQL-Hilfe benötigt: not a single-group group function Allgemeine Java-Themen 4
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
T kleine mp3 Lib Allgemeine Java-Themen 17
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
L kleine frage zum rechner Allgemeine Java-Themen 7
V kleine Threadfrage Allgemeine Java-Themen 10
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
K Kleine Exception Frage ! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
G Kommazahlen mit Komma in Textfeld darstellen Allgemeine Java-Themen 11
S Fehlermeldungen erscheinen erst in der Ausführung des Programms Allgemeine Java-Themen 11
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
J JScrollPane und Button erscheinen nicht Allgemeine Java-Themen 13
N Input/Output Verhindern, dass log-Einträge auf Console erscheinen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben