Die Division durch 65536 ist das Problem, denn der Compiler interpretiert alle Werte als Integer (es sei denn, wert ist ein float).
Eine mögliche Lösung sähe so aus:
Es gibt aber auch noch eine etwas elegantere Lösung, wenn man die Reihenfolge geringfügig ändert:Code:(int)((100.0f / 65536.0f) * (float)wert * 100.0f); oder (int)(((float)100 / (float)65536) * (float)wert * (float)100);
Hier habe ich die rechenintensive Division durch einen einfachen Rechtsshift ersetzt, der wesentlich schneller ist (geht immer, wenn man durch 2^n dividieren möchte). Wichtig dabei ist aber, daß die Multiplikation vorher erfolgt, denn sonst entsteht wieder das selbe Problem wie bei deiner Variante.Code:(100 * 100 * wert) >> 16; bzw. (10000 * wert) >> 16;
Lesezeichen