Auf Thema antworten

Im Allgemeinen gar nicht.


Während für ganze Zahlen der Dezimalwert exakt binär darstellbar ist, gilt dies bei Gleitkommazahlen oft nicht.


Wenn Du Dir das Dezimalsystem ansiehst, dann hast Du links vom Komma die Einer-, Zehner-, Hundeter, ...-Stelle, rechts vom Komma die Zehntel, Hundertstel, Tausendstel usw.


Im Binärsystem analog links vom Komma Einer, Zweier, Vierer, Achter, ... und rechts vom Komma Halbe, Viertel, Achtel, Sechzehntel, ...


Der Wert 1/4 lässt sich sowohl dezimal als auch binär exakt angeben: im Dezimalsystem sind das 2 Zehntel und 5 Hundertstel, also 0.25. Binär dagegen ist es ein Viertel, also 0.01.


1/10 lässt sich im Dezimalsystem exakt angeben (0.1), binär dagegen ist es eine periodische Zahl:

[code]

Berechnung 1 : 10 (dezimal), d. h. 1 : 1010 binär


Schritt 1:


 10000 : 1010 = 0,0001

- 1010

 -----

  0110


Schritt 2:


 10000 : 1010 = 0,00011

- 1010

 -----

  01100

   1010

   ----

   0010


Schritt 3:

 10000 : 1010 = 0,0001100

- 1010

 -----

  01100

-  1010

   ----

   0010000 --> wieder bei Schritt 2 angekommen


Ergebnis: 0,0001100110011001100...

[/code]


Da die Zahl der Stellen beschränkt ist, handelt es sich um einen Näherungswert. Der dezimale Wert dieser Zahl ist 0.1000000000000000055511151231257827021181583404541015625.


Kannst Du selbst ausprobieren: [icode]System.out.println(new java.math.BigDecimal(0.1));[/icode] Verwendest Du [icode]System.out.println(0.1)[/icode] wird automatisch "gerundet" und es wird "0.1" angezeigt. Das ändert aber nichts daran, dass dahinter ein dezimaler Wert mit allen oben gezeigten Nachkommastellen steckt.




Das kannst Du machen, um einen (Näherungs)Wert für eine auf 10 Stellen abgeschnittene Zahl zu erhalten.


Beispiel (Abschneiden nach 1 NkSt):


((int)0.5125*10)/10.0 = 0.5 (binär exakt darstellbar)

((int)0.125*10)/10.0 = 0.1 (binär nur als Näherungswert darstellbar)



Oben