001
12.01.2004, 17:52 Uhr
ao
(Operator)
|
@Nowitzki: Du kannst runden:
C++: |
float f = 1.23456789012345; /* ganz viele Nachkommastellen */
/* jetzt runden wir */ long i = (long) (f * 1000.0 + 0.5); /* Wert von f in ganzen Tausendsteln (1234 hier) */ f = ((float) i) / 1000.0; /* ... und wieder zurück (1.234, theoretisch) */
|
Aber Vorsicht: Nicht jede Zahl, die sich als endliche Dezimalzahl darstellen lässt (z.B. 1.234), hat auch eine endliche Darstellung im Binärformat. Es kann passieren, dass 1.234 zu 1.23399999999 oder zu 1.2340000001 wird, da hast du keinen Einfluss drauf.
Darum kannst du nicht bei der Suche im Array mit == direkt vergleichen. Manchmal triffst du, manchmal liegst du aber auch ein Itzelfitzelchen daneben. Du musst float-Vergleiche immer in einer Epsilon-Umgebung machen.
Such mal hier im Forum nach "epsilon", es gab kürzlich einen Thread dazu.
ao |