Veröffentlicht 11. Februar 201015 j 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; } }
11. Februar 201015 j 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.
11. Februar 201015 j Autor 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)
11. Februar 201015 j Benutz BigDecimal. Oder rechne alles in Cent, dann kannst du Ganzzahltypen benutzen. Benutz nicht double.
15. Februar 201015 j Google -> "java bigdecimal" -> erster Hit: BigDecimal (Java 2 Platform SE 5.0) Oder rechne in Cent, wie Klotzkopp schon sagte. Peter
15. Februar 201015 j Autor 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 =)
15. Februar 201015 j ich hab einfach eine runden methode erstellt und damit die variable gerundetIch geb's auf.
16. Februar 201015 j Mir fallen spontan 2 Varianten ein. 1. Alles in Cent rechnen 2. (double)((int)((ergebnis+0,005)*100))/100d
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.