Runden klappt nicht

herrhans

Neues Mitglied
Hallo,

ich fange gerade mit Java in Eclipse an und habe Google bereits nach einer Lösung bemüht. Dabei bin ich auf folgende Möglichkeit zum Runden auf 2 Dezimalstellen gekommen:
Java:
x=Math.round(Variable*100)/100

Mich würde nun interessieren, wieso hier verschiedene Ergenisse rauskommen:

Java:
Math.round(x*100)/100.0;
Ergebnis: 36.8
Java:
Math.round(x*100)*0.01;
Ergebnis: 36.800000000000004

Anscheinend ist ja 100*x = 3680 und es erscheint mir logisch, dass deswegen im ersten Fall die 0 weggelassen wird und ich über eine Formatierung die auch anzeigen lassen könnte, aber woher kommt im zweiten Fall die 4? Ich dachte, dass durch das Math.round diese vorher "abgehackt" wird.

Gruß
Hans
 

TKausL

Top Contributor
Das kommt durch die ungenauigkeit der gleitkommazahlen.
Google mal nach "ungenauigkeit gleitkommazahlen", da solltest du gut was finden dazu.
 

Templarthelast

Bekanntes Mitglied
Java wurde so auf Geschwindigkeit getrimmt, dass man bei normalen Anwendungen kleine Fehler in z.B. der Gleitkommarechnung zulässt. Falls man es benötigen sollte, kann man immer noch genau rechnen allerdings, ist es in den meisten Fällen mit einem kleinen unbedeutenen Fehler viel schneller.
 

Timothy Truckle

Top Contributor
Mich würde nun interessieren, wieso hier verschiedene Ergenisse rauskommen:
Dass liegt daran, weil Dezimalstellen im Computer nicht exakt dargestellt werden können. Im binären Zahlenbereich sind einige "normale" Dezimalbrüche unendlich. Da Computer aber immer mit begrenzten Zahlen arbeiten kommt es zu "digitalisierungsfehlern".

Deswegen eignen sich Fließkommazahlen übrigens nicht für Rechnungen mit Geld...

bye
TT
 

fastjack

Top Contributor
Das hat übrigens nicht mit Geschwindigkeitsoptimierungen in Java zu tun, sondern fängt schon hardwaremäßig bei der Fließkommaeinheit an.
 
G

Gast2

Gast
sehr gut umformuliert;), ist nämlich eine klassische Aufgabenstellung um die Speicherung von Daten (als Binärcode) und deren Konsequenzen zu zeigen...
Hat was damit zu tun, das man im Binärcode nur 2^n-Potenzen darstellen kann
 

piu58

Mitglied
Wenn du eine Ganzzahl benötigst, dann musst du das Ergebnis in eine umgießen. Dann brauchts du auch die mathematische Funktion nicht und kannst (int)(meineZahl+0.5) schreiben.
 

Olli_M

Mitglied
sehr gut umformuliert;), ist nämlich eine klassische Aufgabenstellung um die Speicherung von Daten (als Binärcode) und deren Konsequenzen zu zeigen...
Hat was damit zu tun, das man im Binärcode nur 2^n-Potenzen darstellen kann

ja, das ist natürlich richtig, aber wenn man mal ganz spitzfindig sein will:
eigentlich müsste dann ja beide Male 36.800000000000004 "rauskommen", aber da spielt wohl auch noch die Frage der Formatierung/Darstellung eine Rolle, oder?!

viele Grüße
Olli
 
T

tröööt

Gast
schöner klassenname ... wusste gar nicht das es sowas gibt =D

@Olli_M
nein ... nicht unbedingt ... denn das problem ist weniger die 3680.0d durch 100.0d zu teilen ... sondern mit 0.01d zu multiplizieren ... denn 100.0d kann glaube ich exakt ohne fehler dargestellt werden ... 0.01d hingegen aber nur noch näherungsweise mit glaube 0.01000000001d oder sowas ... und darum kommt bei der multiplikation was falsches raus ... und bei der division was exaktes ... weil nämlich nicht das ergebnis das problem ist sondern der zweite rechen-operand der in einem fall nicht 100% exakt dargestellt werden kann ...

genau das gleiche problem gilt wenn man z.b. sowas hat

for(double counter=0.0d; counter!=1.0d; counter+=0.1d)

wäre ein endlos-loop ... da counter nie genau 1.0d erreichen würde da 0.1d nicht 100% exakt dargestellt werden kann ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Runden auf 2 Nachkommastellen klappt nicht||| WARUM Java Basics - Anfänger-Themen 13
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
S Runden von Zahlen Java Basics - Anfänger-Themen 1
J Fehler beim Runden Java Basics - Anfänger-Themen 3
T ungewolltes Runden Java Basics - Anfänger-Themen 5
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
J Auf den nächsten Zehner runden? Java Basics - Anfänger-Themen 4
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
A Richtig runden Java Basics - Anfänger-Themen 9
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
S Zahlen runden Java Basics - Anfänger-Themen 5
E Runden Java Basics - Anfänger-Themen 2
U Erste Schritte Kommazahl runden Java Basics - Anfänger-Themen 17
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
Luk10 Nachkommastellen runden Java Basics - Anfänger-Themen 2
S Runden eines doubles auf n nachkommastellen Java Basics - Anfänger-Themen 10
H Zahl auf 2 nachkomma stellen runden Java Basics - Anfänger-Themen 13
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
I Runden / Zweikommastellen geht nicht... Java Basics - Anfänger-Themen 3
J Konvertieren und Runden von double in int Java Basics - Anfänger-Themen 3
H Datentypen Rechnen und Runden Java Basics - Anfänger-Themen 2
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
T Runden mit Präzision vs. Runden mit Nachkommastellen Java Basics - Anfänger-Themen 4
J Runden mit printf Java Basics - Anfänger-Themen 3
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
Rika Runden Java Basics - Anfänger-Themen 6
F Werte runden Java Basics - Anfänger-Themen 11
N Runden Java Basics - Anfänger-Themen 6
J Runden auf 2 Nachkommastellen ? Java Basics - Anfänger-Themen 5
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
J richtig runden Java Basics - Anfänger-Themen 4
B Double je nach Nachkommastellen kfm runden Java Basics - Anfänger-Themen 7
J Runden Java Basics - Anfänger-Themen 4
G divisions ergebnis runden Java Basics - Anfänger-Themen 3
P Runden auf eine Nachkommastelle Java Basics - Anfänger-Themen 18
S Wie runden man noch mal auf bestimmte stellen? Java Basics - Anfänger-Themen 8
S double runden Java Basics - Anfänger-Themen 5
W Runden Java Basics - Anfänger-Themen 10
G Durch Liste iterieren und nachkommastellen runden Java Basics - Anfänger-Themen 9
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
R Zahl runden Java Basics - Anfänger-Themen 18
M Runden eines Doublewerts auf 13 Zeichen Java Basics - Anfänger-Themen 10
A Runden Java Basics - Anfänger-Themen 5
G Kein Runden Java Basics - Anfänger-Themen 3
R "Kaufmännisch runden" Java Basics - Anfänger-Themen 12
P Automatisch auf die nächst höere zahl runden? Java Basics - Anfänger-Themen 7
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
M runden Java Basics - Anfänger-Themen 9
D Einmal Runden ohne alles Java Basics - Anfänger-Themen 7
P Dezimalstellen limitieren (runden auf 2 Stellen) Java Basics - Anfänger-Themen 3
L Automatischen Runden oder Abschneiden? Java Basics - Anfänger-Themen 2
S Double runden funktioniert nicht immer ? Java Basics - Anfänger-Themen 2
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
A Bestimmt blöde Frage: Zahl runden Java Basics - Anfänger-Themen 10
K Fliesskommawert runden Java Basics - Anfänger-Themen 3
L Runden Java Basics - Anfänger-Themen 2
G Zahlen runden Java Basics - Anfänger-Themen 3
C double runden Java Basics - Anfänger-Themen 6
V Double runden Java Basics - Anfänger-Themen 6
D Zahlen runden Java Basics - Anfänger-Themen 10
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
C Runden einer Altersangabe Java Basics - Anfänger-Themen 5
P double Zahl runden Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
F jsoup einloggen klappt nicht Java Basics - Anfänger-Themen 10
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
nbergmann Umgebungsvariablen einstellen unter Windows 7 klappt nicht Java Basics - Anfänger-Themen 2
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Variablen Einheiten umrechen klappt nicht Java Basics - Anfänger-Themen 16
I Schleifendurchlauf ab 2. Durchlauf klappt nicht Java Basics - Anfänger-Themen 10
J Objecte in TreeSet einfügen klappt nicht Java Basics - Anfänger-Themen 5
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
K Methoden Pause drücken klappt nur jedes 2. Mal Java Basics - Anfänger-Themen 6
S UserPref und Java Application klappt immer nicht. Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3
D Telefon programmieren klappt nicht. Java Basics - Anfänger-Themen 5
VfL_Freak Tastaturabfrage auf '@' klappt nicht :-( Java Basics - Anfänger-Themen 1
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
B Erste Schritte Vererbung klappt nicht Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben