Ausgabe von Werten des Typs double

tester01

Mitglied
Hallo,

ich arbeite mich gerade durch ein Java Tutorial. Folgender Code wurde benutzt:

Java:
public class Aufgabe5 {
	
	public static void main ( String[] args ){
	    
		double x,ergebnis;
		for (x=0.0;x<10.0;x=x+0.1) {
		
			ergebnis = (3.0*x*x)-(8.0*x)+4.0;
			System.out.println("x: " + x +" Ergebnis: " + ergebnis);
		
		}		
	 }
}

Die Ausgabe ist folgende:

x: 0.0 Ergebnis: 4.0
x: 0.1 Ergebnis: 3.23
x: 0.2 Ergebnis: 2.52
x: 0.30000000000000004 Ergebnis: 1.8699999999999997
x: 0.4 Ergebnis: 1.2799999999999998
x: 0.5 Ergebnis: 0.75
x: 0.6 Ergebnis: 0.28000000000000025
x: 0.7 Ergebnis: -0.1299999999999999
x: 0.7999999999999999 Ergebnis: -0.47999999999999954

Warum wird aus x=0.3 gleich = 0.30000000000000004 ?

Oder habe ich hier noch einen Denkfehler ?

Grüße,

Thomas
 
G

Gast2

Gast
Fließkommazahlen können intern nur mit ner endlichen Genauigkeit gespeichert werden, deswegen kann es bei float/double zu diesen "ungenauigkeiten" kommen.

Für die Ausgabe kannst du dann z.b. mit dem NumberFormat runden.
 

irgendjemand

Top Contributor
alternativ java.math.BigDecimal ...

[OT]*hatten wir nicht mal diskusion über die angebliche sinnlosigkeit dieser klasse ? hier hätten wir mal ein beispiel dafür das diese klasse durchaus wichtig sein kann*[/OT]
 

faetzminator

Gesperrter Benutzer
alternativ java.math.BigDecimal ...

[OT]*hatten wir nicht mal diskusion über die angebliche sinnlosigkeit dieser klasse ? hier hätten wir mal ein beispiel dafür das diese klasse durchaus wichtig sein kann*[/OT]

Naja, BigDecimal ist IMHO eher für zu grosse Zahlen gedacht.
Ich würd im Fall von tester01 eher die formatierte Ausgabe ([c]printf()[/c]) verwenden. Oder alternativ kann man natürlich noch auf eine gewisse Stelle runden. Dazu einfach [c]* Math.pow(10, n)[/c], dann [c]Math.round()[c] und wieder durch die multiplizierte Zahl rechnen (gibt das Ergebnis für [c]n[/c] Nachkommastellen).
 

tester01

Mitglied
Hallo,

vielen Dank für eure Tips. Ich werde die formatierte Ausgabe versuchen.

Bei der Berechnung eines Ergebnisses verstehe ich die "Rundungsfehler" bzw. "Ungenauigkeiten".

Bei einer expliziten Zuweisung eines Wertes noch immer nicht wirklich. Wenn der Wert 0.3 zugewiesen wird sollten die nachfolgenden Stellen mit 0 aufgefüllt werden?

Oder man initialisiert immer mit der kompletten Genauigkeit, und schreibt bei double einfach die 17 Nachkommastellen:

x=0.30000000000000000

:D

Grüße,

Thomas
 

javapower

Mitglied
Wenn es nur um die Ausgabe geht, versuche einmal folgendes:

Code:
System.out.printf("x: %.1f  Ergebnis: %.1f\n" , x, ergebnis);
 

irgendjemand

Top Contributor
Naja, BigDecimal ist IMHO eher für zu grosse Zahlen gedacht.
Ich würd im Fall von tester01 eher die formatierte Ausgabe ([c]printf()[/c]) verwenden. Oder alternativ kann man natürlich noch auf eine gewisse Stelle runden. Dazu einfach [c]* Math.pow(10, n)[/c], dann [c]Math.round()[c] und wieder durch die multiplizierte Zahl rechnen (gibt das Ergebnis für [c]n[/c] Nachkommastellen).

das wäre echt super ... wenn du division am ende nicht wieder alles kaputt machen würde ...

ich erinnere mal an das beispiel von wikipedia ... 129/40 sind für einen menschen glatt 12,45 ... für den rechner wäre es eine unendliche binär-darstellung ... wesshalb dann nicht 12,45 rauskommt .. sondern alles andere *was halt am nächsten endlich binär darstellbar ist*

von daher würde ich BigDecimal nicht nur für beliebig große zahlen verwenden ... sondern auch für beliebig genaue ...
 

faetzminator

Gesperrter Benutzer
das wäre echt super ... wenn du division am ende nicht wieder alles kaputt machen würde ...
Eigentlich sollte das ohne Probleme funktionieren, da x/10 IMHO sowohl als double als auch als float ohne Wertverlust gespeichert werden sollte!? Die exakten "Einschränkungen" bzw. Definitionen der Datentypen sind mir aber ehrlich gesagt nicht bekannt.

ich erinnere mal an das beispiel von wikipedia ... 129/40 sind für einen menschen glatt 12,45 [...]
Also für mich wärs wohl eher 3.225 ;)

von daher würde ich BigDecimal nicht nur für beliebig große zahlen verwenden ... sondern auch für beliebig genaue ...

Es kommt halt immer auf die Genauigkeit drauf an. Wenn du 25 Nachkommastellen supporten musst, dann ist BigDecimal sicher eine Überlegung wert.
 

irgendjemand

Top Contributor
Eigentlich sollte das ohne Probleme funktionieren, da x/10 IMHO sowohl als double als auch als float ohne Wertverlust gespeichert werden sollte!? Die exakten "Einschränkungen" bzw. Definitionen der Datentypen sind mir aber ehrlich gesagt nicht bekannt.
hmm ... x/10 ist für den rechner aber weit aufwändiger als für uns menschen einfach die letzte stelle zu entfernen *falls "0"* bzw das komma eine stelle nach links zu rücken
für den rechner ist x/2 sehr viel einfacher da er dabei nur bit-shifting machen muss
Also für mich wärs wohl eher 3.225 ;)
ja ... ich hatte es nicht mehr im kopf ... das beispiel von wiki war : 249/20 ... mein fehler xD
Es kommt halt immer auf die Genauigkeit drauf an. Wenn du 25 Nachkommastellen supporten musst, dann ist BigDecimal sicher eine Überlegung wert.
soweit würde ich noch nicht mal gehen ...
ich würde es schon einsetzen wenn ich wüsste das z.b. 0.3 nicht richtig dargestellt werden kann obwohl ich es so deklariert habe ...
es kommt also nicht nur darauf an wie genau es sein muss *also 100 nachkommastellen* sondern auch darauf ob ein primitiver datentyp in der lage ist einen gewissen wert richtig darzustellen ... was bei TO bei 0.3 nicht der fall zu sein scheint ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
S Ausgabe von Werten Java Basics - Anfänger-Themen 25
A Probleme mit Ausgabe von Werten Java Basics - Anfänger-Themen 7
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
B Binärzahlen auflisten, falsche Ausgabe? Java Basics - Anfänger-Themen 1
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
B Deadlock verstehen der Ausgabe! Java Basics - Anfänger-Themen 12
Lion.King Ausgabe mit Eigenschaften Java Basics - Anfänger-Themen 4
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
Xaver code Tastatur ausgabe Java Basics - Anfänger-Themen 4
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
K Leerzeile in Konsolen-Ausgabe Java Basics - Anfänger-Themen 4
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
Q return Ausgabe Java Basics - Anfänger-Themen 4
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
S Ausgabe des Variablenwerts Java Basics - Anfänger-Themen 10
I Ausgabe nicht nur senkrecht sondern auch waagerecht. Java Basics - Anfänger-Themen 2
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
J String Ausgabe Java Basics - Anfänger-Themen 2
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
KogoroMori21 Array-Ausgabe Java Basics - Anfänger-Themen 6
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
D Ausgabe von Array Java Basics - Anfänger-Themen 2
U Ausgabe Java Basics - Anfänger-Themen 4
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
V Multiplikationstafel - Ausgabe Java Basics - Anfänger-Themen 4
L Warum ist die Ausgabe anders als das was im Bezeichner steht? Java Basics - Anfänger-Themen 4
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
D Warum erfolgt folgende Ausgabe und warum? Java Basics - Anfänger-Themen 4
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
T Ausgabe einer for Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Ausgabe Gesamtpreis Java Basics - Anfänger-Themen 39
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
J StrinBuffer in der Ausgabe Java Basics - Anfänger-Themen 4
H ausgabe? Java Basics - Anfänger-Themen 32
B Ausgabe Zahlenreihe Horizontal Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
K Array Ausgabe Java Basics - Anfänger-Themen 2
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
C 1x1 Ausgabe auf dem Bildschirm Java Basics - Anfänger-Themen 3
L Fehler im Programm bei Ausgabe Java Basics - Anfänger-Themen 21
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
F Warum ist die Ausgabe hier 1? Java Basics - Anfänger-Themen 4
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
H Ausgabe Java Basics - Anfänger-Themen 6
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11
F Erste Schritte Subnet Calculator - Ausgabe der NetID und der Broadcast Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben