OT : Java

Joern Muehlencord joern at muehlencord.de
Tue Apr 23 17:23:03 CEST 2002


Hallo Jan,

> 0.0 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 
> 0.7 0.799999999999999 0.8999999999999999 
> 0.9999999999999999
> 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 
> 0.8000001 0.9000001
> ?!?!? Hä, wie kann das denn sein? Habe ich hier nen Bug in Java 
> oder bei mir gefunden ?
> Liegt jedenfalls nicht am Betriebssystem(Linux, Solaris oder 
> Win) oder der Java-Version(1.1.8, 1.2.2, 1.3.1, 1.4.0 alle von 
> SUN).

Das ist fuer Fliesskomma-Zahlen (unter Java) eigentlich normal. Wenn das
in der weitere Berechnug von wichtiger Bedeutung ist, dann musst du mit 
Math.round den Nachkommal teil auf nen int-bringen. Dann passiert dir 
das nicht mehr.

Das tritt z.B. dann auf, wenn du Math.ceil auf eine Double-Zahl 
loslaesst; beispielsweise erwartest du ja bei Math.ceil (3.7) eine 4 - 
man bekommt aber evtl eine 3.9999999 - wenn man die dann auf (int) 
-castet, dann hast du einen falschen Wert. (3 anstatt 4) Deswegen sieht 
der richtige Ausdruck fuer diesen Teil so aus:

double a = ....
int b = Math.round(Math.ceil(a));

Mfg
  Joern
-- 
The box said "Requires Win95, NT, or better," and so I installed Linux.




More information about the Linux mailing list