tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
895
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Duckemai
    Duckemai Duckemai ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    31
    Hallo zusammen,

    ich versuche derzeit eine relativ simple Rechenfunktion einzubauen.
    Aber das Ergebnis ist katastrophal.

    Beispiel:
    Es soll einfach nur 5.6 mit 3 multipliziert werden.
    Das sieht dann so aus:

    ausgabe.setText(String.valueOf((5.6*3)));

    Mit dem völlig falschen Ergebnis: 16.79999999 anstatt 16.8.

    OK, ein Rundungsfehler, den ich mit:
    x = Math.round( erg * 10.0 ) / 10.0;
    beheben könnte. Aber es soll ja nicht immer gerundet werden!! Denn bei zB
    5.7*3.1 bekomme ich das richtige Ergebnis von 17,67 mit 2 Nachkommastellen.

    Wie kann ich es einrichten, dass nur gerundet wird, wenn das
    Ergebnis nicht richtig ist. Kennt jemand eine passende Methode?

    Vielen Dank
    Duckemai
     

  2. #2
    Tim Bureck Tim Bureck ist offline Mitglied Brokat
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    498
    Tja, das liegt leider an der Natur der Gleitkommazahlen, da kann man wenig gegen machen, wenn man keinen Vergleichswert hat. Du könntest dir höchstens mal die Klasse java.math.BigDecimal anschauen und gucken, ob du damit weiter kommst.
     

  3. #3
    Avatar von Duckemai
    Duckemai Duckemai ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    31
    Danke,
    aber mit BigDecimal klappt es auch nicht besser.
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    Code java:
    1
    2
    3
    4
    
    double a = 5.6;
    double b = 3;
    double c = BigDecimal.valueOf(a).multiply(BigDecimal.valueOf(b)).doubleValue();
    System.out.println(c);

    Ausgabe:
    Code :
    1
    
    16.8
    ist schrecklich... ist aber so...

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    Avatar von Duckemai
    Duckemai Duckemai ist offline Mitglied Bronze
    Registriert seit
    Feb 2010
    Beiträge
    31
    Hallo,

    das macht einen guten Eindruck.
    Das Runden scheint mir bei diesen Funktionen aber etwas hackelig zu sein.
    z.B: BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3),RoundingMode).doubleValue()
    Die Ausgabe 0.666666 fehlt mir da.
    Ich habe es mit round() gelöst.

    Danke
    Duckemai
     

  6. #6
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Zitat Zitat von Duckemai Beitrag anzeigen
    Das Runden scheint mir bei diesen Funktionen aber etwas hackelig zu sein.
    z.B: BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3),RoundingMode).doubleValue()
    Die Ausgabe 0.666666 fehlt mir da.
    Probier es mal so:
    Code java:
    1
    2
    3
    
    // Rundung auf 6 Nachkommastellen:
    String s = BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3), 6, RoundingMode.DOWN).toPlainString();
    System.out.println(s);
    Wenn du nur an einer Stringdarstellung des Ergebnisses interessiert bist, würde ich gleich wie oben toPlainString() o.ä. verwenden, anstatt erst in einen Double zu konvertieren.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. Rechnen
    Von mckani im Forum PHP
    Antworten: 0
    Letzter Beitrag: 07.12.05, 18:08
  2. Rechnen mit PHP
    Von Camod im Forum PHP
    Antworten: 9
    Letzter Beitrag: 05.10.05, 20:46
  3. Rechnen mit PHP
    Von meilon im Forum PHP
    Antworten: 15
    Letzter Beitrag: 24.05.04, 22:19
  4. +- Rechnen !
    Von BigBruder im Forum Java
    Antworten: 6
    Letzter Beitrag: 14.11.03, 22:31
  5. Rechnen in SQL
    Von kesnw im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 24.10.03, 15:26