tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
354
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    crkn crkn ist offline Grünschnabel
    Registriert seit
    Apr 2010
    Beiträge
    4
    Hi,

    kann mir mal kurz wer sagen wieso bei:

    Code :
    1
    2
    3
    4
    
            double v1 = 2E-5;
            double v2 = 1E-6;
            double v3 = v1 / v2;
            System.out.println("-> " + v3);

    Code :
    1
    
    -> 20.000000000000004

    anstatt 20.0 rauskommt?
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Ich glaube, das hängt damit zusammen:

    Code :
    1
    2
    3
    4
    5
    6
    
    Schon einfache Dezimalzahlen, z. B. 0,1, können nicht mehr exakt als binäre Gleitkommazahlen
    dargestellt werden, da viele im Dezimalsystem abbrechende Kommazahlen im Binärsystem
    nicht abbrechende, periodische Zahlen sind; von diesen werden nur die ersten p Ziffern
    gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… Man
    kann aber zeigen, dass sich in einem binären Gleitkommasystem dennoch exakt 10 · 0,1 = 1 ergeben
    muss.

    Auf jeden Fall sind Gleitkommazahlen nicht 100% genau. Runden kann man per Math.floor, Math.round und Math.ceil.
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  3. #3
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Das liegt an der http://de.wikipedia.org/wiki/IEEE_754 Norm.

    Kurz gesagt, auf Kosten der Genauigkeit wird größere bzw. niedrigere Zahlen dargestellt.

    Wenn du daher wirklich eine genaue "Kommzahl" brauchst und du nicht einfach ein 64bit long oder 32bit int nehmen kannst (z.B. Würde ich bei Geldbeträgen auf Cent rechnen) dann brauchst du ein BigDecimal Object. Bei dem kann man einstellen, wie genau dieser sein soll.
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

Ähnliche Themen

  1. css Grafik mit Rundung
    Von spamerix im Forum CSS
    Antworten: 32
    Letzter Beitrag: 01.11.08, 12:13
  2. Rundung
    Von sight011 im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 24.07.08, 15:09
  3. Rundung schneiden
    Von gerd87 im Forum Cinema 4D
    Antworten: 1
    Letzter Beitrag: 20.01.07, 14:19
  4. Ausgestanztes mit Rundung
    Von UMAXDJ im Forum Cinema 4D
    Antworten: 17
    Letzter Beitrag: 29.03.05, 18:52
  5. Rundung ist pixelig ?
    Von Krusty-Ac im Forum Photoshop
    Antworten: 11
    Letzter Beitrag: 18.02.05, 17:24