Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > der Wert von Datentyp double
Antwort
 
Themen-Optionen
Alt 29.04.2005, 20:26   Nach oben    #1
punachino
Gast
 
Beiträge: n/a
Standard der Wert von Datentyp double

Ich habe ein Problem mit Datenty double, und zwar

public class Tag
{
public static void main(String args[])
{
double x=2.3;
int y;
double z;
y=(int)x;
z=x-y;
System.out.println(y);
System.out.println(z);
}


}
In Bildschirm zeigt :
2
0.2999999999999998

Warum nicht 0.3 ?? Wer kann mir erklären? Und wie kann ich den richtigen Wert von double in Bildschirm bringen?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.04.2005, 20:53   Nach oben    #2
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Der Grund ist dass Double in Java eine Fliesskommazahl ist. Mit 15 signifikanten Ziffern in 64 Bit.

Das heisst gespeichert wird der Zahlenwert wird in negativen Zweierpotenzen 2^-1, 2^-2 etc
dazu kommen dann noch Zehnerpotenzen von 10^-300 bis 10^300 oder so ähnlich.
Mit ausschliesslich negativen 2er Potenzen kannst du halt 0.3 nicht genau darstellen. Das gehört halt so zu den Eigenschaften von Fliesskommazahlen.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.04.2005, 21:23   Nach oben    #3
punachino
Gast
 
Beiträge: n/a
Standard

Danke für deine Erklärung.Wenn wir nicht genau den Wert von double darstellen können, is es unmögich, ein double Zahl(dezimal) in binäre umzuwandeln ???
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2005, 09:33   Nach oben    #4
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Wie meinst du das genau?

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2005, 12:26   Nach oben    #5
mr1st
Benutzer
 
Benutzerbild von mr1st
 
Registriert seit: 08.02.2005
Ort: Wien
Beiträge: 85
Standard

Man kann jeden double Wert binär darstellen. Aufgrund der Art, wie Fließkommazahlen gespeichert werden, sind sie selbst aber ungenau. zB 3 kann mit Fließkommazahlen nicht (oder nur sehr sehr schwer) abgebildet werden.

Wenn Du aber aus irgend einem Grund sehr genaue Kommastellen benötigst, sieh Dir mal BigDecimal an.

MfG
__________________
Kosmetik Hobby
mr1st ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2005, 13:16   Nach oben    #6
punachino
Gast
 
Beiträge: n/a
Standard

Ich möchte dieses Ergebnis von (2.3-2) in binär darstellen. Aber wie gesagt, bei java das Ergebnis von (2.3-2) =0.2999999999999998. Aus disem Grund können wir nicht in binär umwandeln oder ?

P/s : Sorry Ich bin Ausländer. Zufällig stoße ich euche Webseite. Ich bin gerade in Java eingesteigt. Deswegen möchte ich hier einige Tipp,Trick, Erfahrung zu sammeln. Ich würde mich freuen, wenn ihr mir hilft, java und Deutsch zu verbessern. Bitte habt Verständnis für meine schlechte Deutsch
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.04.2005, 21:06   Nach oben    #7
`B
Benutzer
 
Benutzerbild von `B
 
Registriert seit: 05.07.2004
Beiträge: 95
Standard

also schlechtes Deutsch sollte das kleinste Problem sein, weil offensichtlich kannst du dich ja ausdrücken . Also ich bin mir gerade net sicher ... aber gucke dir mal das Objekt java.lang.Math an ... evtl. hilft dir das weiter. Ansonsten wüßte ich nun nicht, mache selten etwas mit Zahlen und habe in der Hinsicht noch gar keine Erfahrung ...
__________________
`B ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.05.2005, 00:59   Nach oben    #8
punachino
Gast
 
Beiträge: n/a
Standard

Ja klar ! Ich habe schon Klasse Java.lang.Math angeschaut und auch alle Methode darin durchgelsen. Aber habe ich noch nicht die Lösung für mein Problem gefunden.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2005, 00:46   Nach oben    #9
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Es ist zu spät, daher schau ich mir die API jetzt nicht an,
aber soviel ich weiß gibt es doch in der Math auch Rundungsmethoden, oder?
Die würden dir doch helfen.

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2005, 07:23   Nach oben    #10
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Wie willst du in der Binärausgabe überhaupt das Komma darstellen?

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2005, 16:01   Nach oben    #11
punachino
Gast
 
Beiträge: n/a
Standard

z.B : 0.6875 in binär darstellen

Integer Bruch
0,6875 1 0,375
0,375 0 0,750
0,750 1 0,5
0,5 1 0

0,6875 ---->0,1011
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2005, 18:28   Nach oben    #12
peschmae
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

also 0,1101 wäre das dann?

Das kannst du mit Doubles vergessen. Es sei denn du rundest (z.B. auf die 14. signifikante Ziffer) - dann kriegst du normalerweise das richtige (also hier 3.00000000000) und entsprechend 11,00000000000

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.11.2005, 20:25   Nach oben    #13
Hannibal
Gast
 
Beiträge: n/a
Standard

Hab auch noch eine Frage zu Kommastellen. Ist es möglich festzulegen wieviele Stellen hinter dem Komma bei z.B. double angezeigt werden sollen?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.11.2005, 18:13   Nach oben    #14
Xean
Erfahrener Benutzer
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 423
Standard

Ich bin String fan, versuche es mal so:
PHP-Code:
  double d = ???;
 
String s d;
 
String[] sArrays.split(",");
 
System.out.println(sArray[1].length); 
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.11.2005, 21:06   Nach oben    #15
Murray
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Schau Dir mal java.text.NumberFormat an.

Bsp.:

Code:
double d = 123.456789;
NumberFormat nf = NumberFormat.getInstance();
nf.setFractionDigits( 2);
System.out.println( nf.format( d));
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.11.2005, 10:43   Nach oben    #16
rennfrikadelle
Gast
 
Beiträge: n/a
Standard

Probier mal folgendes aus:

System.out.println(0.3 -0.1 -0.1 -0.1);
System.out.println(-0.1 -0.1 -0.1 + 0.3);

System.out.println(0.5 -0.1 -0.1 -0.1 -0.1 -0.1);
System.out.println(-0.1 -0.1 -0.1 -0.1 -0.1 + 0.5);

In allen Fällen sollte 0 herauskommen - dummerweise ist dies nicht der Fall.

Fließkommazahlen sind eine Ausgeburt des IEEE Kommites und für ernsthafte Aufgaben in meinen Augen nicht geeignet. Die haben zwar einen gigantischen Wertebereich, der jedoch nicht Lückenlos abgedeckt wird. Fällt ein Ergebniss auf eine solche Lücke, entsteht ein kleiner Rechenfehler, der sich je nach Rechnung sehr schnell hochmultiplizieren kann.

Des weiteren kommt noch das Umwandlungproblem hinzu - nicht jede dezimale Zahl läßt sich genauso als binäre Fließkommazahl darstellen - als Beispiel sei die 0.2 genannt, für die es binär keine endliche Abbildung gibt.

Aus diesem Grund werden Fließkommazahlen bei "ernsthaften" Anwendungen nicht verwendet. Sie werden ersetzt...

Im Bereich Banken/Versicherungen durch Integerzahlen. Man rechnet nicht mit Euro, sondern als Einheit mit hunderstel Cent.

Tabellenkalkulationen arbeiten mit Festkommazahlen, bei denen ein Integerwert für den Vorkomma und ein weiterer für den Nachkommaanteil genutzt wird.

In der Wissenschaft arbeitet man mit BCD-Zahlen, deren Genauigkeit nur vom Rechner abhängt und nicht vom Datentyp.

Alle drei lassen sich sehr gut umwandeln und decken ihren Wertebereich voll ab - die wichtigste Vorraussetzung für korrekte Rechnungen.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schlüssel in verschachteltem Array suchen und Wert zurückgeben Ben PHP-Programmierung 8 19.10.2006 18:54
Pfadfinder Xean Allgemeine Java-Programmierung 8 04.06.2006 15:10
Modifier haben einen Wert, obwohl keine gedrückt sind materthron Desktop-Applikationen und Grafik 3 06.11.2005 16:28
Gehaltsrechner Chickse Desktop-Applikationen und Grafik 1 19.06.2005 11:42
Errechnung der Zahl Pi in Java BoneCracker Allgemeine Java-Programmierung 6 15.02.2005 18:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:55 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44