screamboy14 Geschrieben 11. Februar 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Februar 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
screamboy14 Geschrieben 11. Februar 2010 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Februar 2010 Teilen Geschrieben 11. Februar 2010 Benutz BigDecimal. Oder rechne alles in Cent, dann kannst du Ganzzahltypen benutzen. Benutz nicht double. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
screamboy14 Geschrieben 11. Februar 2010 Autor Teilen Geschrieben 11. Februar 2010 wenn ich wüsste was das ist ^^ aber danke für den tipp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 15. Februar 2010 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
screamboy14 Geschrieben 15. Februar 2010 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 15. Februar 2010 Teilen Geschrieben 15. Februar 2010 ich hab einfach eine runden methode erstellt und damit die variable gerundetIch geb's auf. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 16. Februar 2010 Teilen Geschrieben 16. Februar 2010 Mir fallen spontan 2 Varianten ein. 1. Alles in Cent rechnen 2. (double)((int)((ergebnis+0,005)*100))/100d Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
screamboy14 Geschrieben 17. Februar 2010 Autor Teilen Geschrieben 17. Februar 2010 danke für die hilfe =) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.