screamboy14 Geschrieben 11. Februar 2010 Geschrieben 11. Februar 2010 hallo und zwar mache ich zurzeit eine Ausbildung zum Mathematisch-Technischen- assistenten... und bin gerade einen OO-ticketautomaten zu programieren mein problem ist jetz da bei java ja manchmal rechnungsprobleme auftreten, bei den man runden muss z.B. beim geldeinwerfen (50 +20+10 =79,9999999999....) so und da liegt auch mein problem das programm soll ja ein ticket ausdrucken, sobald der eingezahlte betrag = dem preis ist da es aber zu diesem rechenfehler kommt, dachte ich mir ok mach ich es mit dem DecimalFormat allerdings speichert er das gerundete ergebnis nur in dem textfeld ab nicht aber in der dazugehörigen variable so das zwar im textfeld 80 angezeigt wird aber der gezahlte preis intern noch 79,99999... ist meine frage ist jetz wie kann ich die betrag in der bishergezahlt variable speichern methode Jframe private void jButtonGeldEinwerfenActionPerformed(ActionEvent evt) { ticketautomat.setEinwerfenGeld(Double.parseDouble(jTextFieldGeldEinwerfen.getText())); jTextFieldBisherGezahlt.setText(df.format(ticketautomat.getBisherGezahlt())); System.out.println(ticketautomat.getBisherGezahlt()); } methode aus der logisschen klasse ticketautomat public void setEinwerfenGeld(double betrag) { _bisherGezahlt = _bisherGezahlt + betrag; _rest = _fahrpreis - _bisherGezahlt; _ueberschuss = _bisherGezahlt - _fahrpreis; if (_rest < 0) { _rest = 0; } if (_ueberschuss < 0) { _ueberschuss = 0; } } Zitieren
Klotzkopp Geschrieben 11. Februar 2010 Geschrieben 11. Februar 2010 Fließkommatypen sind für solche Operationen nicht geeignet, weil sie nur sehr wenige, ausgewählte nicht-ganzzahlige Werte exakt speichern können. Darum kommt es beim Rechnen mit double-Variablen zu Rundungsfehlern. Das ist übrigens kein Java-spezifisches Problem, sondern ein generelles Problem bei Fließkommatypen in allen Programmiersprachen. Du könntest BigDecimal benutzen. Zitieren
screamboy14 Geschrieben 11. Februar 2010 Autor Geschrieben 11. Februar 2010 kann man das nicht irgendwie, mit devimal format runden auf 2 stellen bis jetz hatte ich ja nie probleme mit dem runden bzw decimal format (bei strukturierter programierung) Zitieren
Klotzkopp Geschrieben 11. Februar 2010 Geschrieben 11. Februar 2010 Benutz BigDecimal. Oder rechne alles in Cent, dann kannst du Ganzzahltypen benutzen. Benutz nicht double. Zitieren
screamboy14 Geschrieben 11. Februar 2010 Autor Geschrieben 11. Februar 2010 wenn ich wüsste was das ist ^^ aber danke für den tipp Zitieren
kingofbrain Geschrieben 15. Februar 2010 Geschrieben 15. Februar 2010 Google -> "java bigdecimal" -> erster Hit: BigDecimal (Java 2 Platform SE 5.0) Oder rechne in Cent, wie Klotzkopp schon sagte. Peter Zitieren
screamboy14 Geschrieben 15. Februar 2010 Autor Geschrieben 15. Februar 2010 klingt zwar doof aber ich wusset nicht welche java iversion ich hab ^^ hab das problem allerdings gelöst ^^ =) ich hab einfach eine runden methode erstellt und damit die variable gerundet (was mit decimalFormat aus irgendeinem grund nicht ging) jedenfals danke für die hilfe ich gug mir das big decimal an =) Zitieren
Klotzkopp Geschrieben 15. Februar 2010 Geschrieben 15. Februar 2010 ich hab einfach eine runden methode erstellt und damit die variable gerundetIch geb's auf. Zitieren
speedi Geschrieben 16. Februar 2010 Geschrieben 16. Februar 2010 Mir fallen spontan 2 Varianten ein. 1. Alles in Cent rechnen 2. (double)((int)((ergebnis+0,005)*100))/100d Zitieren
screamboy14 Geschrieben 17. Februar 2010 Autor Geschrieben 17. Februar 2010 danke für die hilfe =) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.