Rechnen mit Java

Flex IV

Mitglied
hi,
irgendwie komm ich hier nur schwer zurecht, selbst bei einfachsten Rechenaufgaben. Hab gerade eine Stunde den Fehler gesucht, weil mit

int progressTime, target, step;
...
float prog = progressTime / target * step;

prog immer 0 war Letztendlich hab ich dann rausgefunden das es geht mit

float prog = (float) ((float) progressTime / (float) target * (float) step);

toll! Geht es vielleicht NOCH eleganter ?
 
Hi!
Ja, toll, es geht NOCH eleganter, wenn man versteht, was man da tut!
Merke: Sind bei einer Operation beide Operanden Ganzzahlen, also wie bei dir vom typ int, so ist die Operation auch eine Ganzzahl- Operation. Ist mindestens eine Zahl eine Gleitkommazahl, so ist die Operation ebenfalls eine Gleitkommaoperation!

Da bei dir alle Operanden vom typ int sind, kann am Ende auch nur eine Ganzzahl herrauskommen. Wäre bei dir target vom Typ float, wäre das Ergebnis nach obiger Regel auch eine Gleitkommazahl, und somit das erwartete Ergebnis!

Also entweder target vom typ float deklarieren, oder:
Code:
float prog =progressTime / (float) target *step;

*grüssle*
 
Zuletzt bearbeitet:
thx.
Na es gibt halt compiler, die prüfen auch den typ links vom = Zeichen, und wandeln die beteiligten operanden implizit (und dankensweterweise) gleich mit um.
Bin aber jetzt schon froh, dass ein cast schon reicht...
grüsse
 
Zurück