Spieleguru
Mitglied
Hallo,
mich hat jetzt ein kleines Problem wirklich Stundenlang beschäftigt. Ich wollte von einem Integer (in diesem Fall) 10% abziehen und diese dann zurückgeben. Das Ding ist bloß, ich möchte es nicht genau berechnen, sondern die Nachkommastellen sollen abgeschnitten werden von den errechneten 90%. Bei 162 müsste demnach 17(162 - (162*0,9) = 162 - 145[,8]), bei 160 16 (160 - 160*0,9) = 160 - 144) zurück geliefert werden:
Für den wert 160 wurde jedoch immer 17 zurück geliefert, für 110 12 usw. Ich habe ewig nach den Fehler gesucht, bis ich alle floats mal durch double ersetzt habe. Von da an lief alles einwandfrei!
Jetzt ist meine Frage: Warum? Was ist anders? Das einzige was mir einfallen würde, wäre, das als Ergebnis für StatusWesen nicht genau 144 raus kommt, sondern 143,999999... Das würde das Ergebnis erklären, da die Nachkommastellen ja bloß abgeschnitten werden. Jedoch hette ich gelesen, das Float bis zu 7 Nachkommastellen genau ist?
mich hat jetzt ein kleines Problem wirklich Stundenlang beschäftigt. Ich wollte von einem Integer (in diesem Fall) 10% abziehen und diese dann zurückgeben. Das Ding ist bloß, ich möchte es nicht genau berechnen, sondern die Nachkommastellen sollen abgeschnitten werden von den errechneten 90%. Bei 162 müsste demnach 17(162 - (162*0,9) = 162 - 145[,8]), bei 160 16 (160 - 160*0,9) = 160 - 144) zurück geliefert werden:
Code:
public int berechneStatusWesenDiffInit(float WesenInit) // Woanders über float x = 0.9F initialisiert
{
int Init = 160;
int StatusWesen = (int)(Init * WesenInit);
return (StatusWesen > Init) ? StatusWesen - Init : Init - StatusWesen;
}
Für den wert 160 wurde jedoch immer 17 zurück geliefert, für 110 12 usw. Ich habe ewig nach den Fehler gesucht, bis ich alle floats mal durch double ersetzt habe. Von da an lief alles einwandfrei!
Code:
public int berechneStatusWesenDiffInit(double WesenInit) // Woanders über double x = 0.9 initialisiert
{
int Init = 160;
int StatusWesen = (int)(Init * WesenInit);
return (StatusWesen > Init) ? StatusWesen - Init : Init - StatusWesen;
}
Jetzt ist meine Frage: Warum? Was ist anders? Das einzige was mir einfallen würde, wäre, das als Ergebnis für StatusWesen nicht genau 144 raus kommt, sondern 143,999999... Das würde das Ergebnis erklären, da die Nachkommastellen ja bloß abgeschnitten werden. Jedoch hette ich gelesen, das Float bis zu 7 Nachkommastellen genau ist?
Zuletzt bearbeitet: