Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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;

}

}

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...