Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

runungsproblem

Empfohlene Antworten

Veröffentlicht

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;

}

}

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.

Google -> "java bigdecimal" -> erster Hit: BigDecimal (Java 2 Platform SE 5.0)

Oder rechne in Cent, wie Klotzkopp schon sagte.

Peter

  • 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 =)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.