Java Floating Point Operations zu ungenau

  • Code
    double d = 1.5;
        d += 0.7;
        d -= 1.0;

    Hallo.
    Mein Problem liegt genau in den oberen 3 Zeilen Code.
    Führt man sie aus, erwartet man, dass in d anschließend 1.2 gespeichert ist.
    Das ist aber nicht der Fall, sondern: 1.2000000000000002.

    Wie verhindere ich das? bzw wie generiere ich in solchen Fällen die richtigen (erwarteten) Werte (zumindest in der Ausgabe durch String.format(...)) ?

    Danke für eure Hilfe.

    PS: strictfp hilft auch nicht...

  • Tja, das selbe Problem.

    Ich habe es jetzt mit einem regulären Ausdruck gelöst, ist zwar nicht die schönste Variante, aber sie funktioniert ;).

    Code
    String s = new Double(d).toString().replaceFirst("0{2,}\\d+", "")

    Sobald zwei Nullen hintereinander vorkommen, verwerfe ich diese und alle Zahlen, die dann noch kommen.

    Verdammt, da fällt mir gerade auf, dass das bei 0,7 nicht funktioniert...

  • Die Lösung hängt natürlich vom Problem ab. Ich hatte mal ein ähnliches Problem bei einem rekursiven Algorithmus welcher viele Brüche addiert hat. Ich konnte es dadurch lösen, dass ich anstatt immer einen Bruch auszurechnen nur Nenner und Zähler des gekürzten Bruchs in einem Tupel gespeichert habe und mit dem weitergerechnet hab. Das hätte aber nicht funktioniert wenn Zahlen wie Wurzel(2) vorgekommen wären die man nicht als Bruch darstellen kann.


    -(-a → a)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!