![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
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? |
|
| | Nach oben #2 |
| Erfahrener Benutzer Registriert seit: 29.05.2004
Beiträge: 228
|
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 |
| | |
| | Nach oben #4 |
| Erfahrener Benutzer Registriert seit: 29.05.2004
Beiträge: 228
|
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 |
| | |
| | Nach oben #5 |
| Benutzer Registriert seit: 08.02.2005 Ort: Wien
Beiträge: 85
|
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 |
| | |
| | Nach oben #6 |
| Gast
Beiträge: n/a
|
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 |
|
| | Nach oben #7 |
| Benutzer Registriert seit: 05.07.2004
Beiträge: 95
|
also schlechtes Deutsch sollte das kleinste Problem sein, weil offensichtlich kannst du dich ja ausdrücken
__________________ |
| | |
| | Nach oben #10 |
| Erfahrener Benutzer Registriert seit: 29.05.2004
Beiträge: 228
|
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 |
| | |
| | Nach oben #12 |
| Erfahrener Benutzer Registriert seit: 29.05.2004
Beiträge: 228
|
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 |
| | |
| | Nach oben #16 |
| Gast
Beiträge: n/a
|
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. |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ä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 |