Intressanter Bug beim casten?
-
Hi,
mir und meiner Freundin ( )ist grade was interessantes aufgefallen:
int funktion (float zahl1, float zahl2) { return (int)zahl1+(int)zahl2; }
wenn zahl1 = 9.9 ist und zahl2 = 8 ist bekommen wir als Ergebnis 17 raus und nicht 18? wieso castet der nicht richtig oder rundet der total falsch?
-
da wird nicht gerundet, sondern abgeschnitten!!!!!!!!!111111
-
*lol*
der ganzahlige teil von 9.9 ist nun mal 9.
das hat mit runden garnichts zu tun
-
wieso das? Also ich dachte auch, dass da immer gerundet wird?
-
hallo,
nein , so ein quatsch...
runden ist runden, casten ist casten, äpfel sind äpfel und birnen sind birnen...
-
und wie rundet der dann? ich mein ja, wenn der von float zu int gecastet wird, heißt das alle nachkommastellen weren einfach so abgeschnitten und rundet deshalb nicht?
-
Nene, zum Runden musst du schon eine richtige Funktion verwenden, nur fällt mir der Name grad net ein, denn soweit ich weiß, rundet floor() immer ab und ceil() immer auf (aber keine Garantie darauf).
ChrisM
PS: Verwende doch bitte einen static_cast statt dem C-Cast!
-
Jup. CrisM hat's gesagt. floor zm abrunden, ceil zum aufrunden. Das ist aber dafür da, wenn anschließend wieder ein float-Wert gebraucht wird.
Wegen des rundens static_cast<int>(foo+.5f) würde in eurem Fall helfen.
-
Aber stimmt eigentlich: Im Standard fehlt die Funktion round:
template<class T> T round(const T &val) { if (val >= 0) return floor(val + 0.5); else return floor(val - 0.5); }
oder so ähnlich