Float zahl in long zahl casten ohne verlust der nachkommastelle beim zurückcasten
-
also ich steh hier mal wieder vor nem problem
und zwar soll ich in ne vorgegebene FKT (float add(float a, long b) )
zahlen casten und zwar so das keine daten verloren gehen...die FKT darf nicht verändert werdenbis jetzt sieht die fkt bei mir so aus:
float add(float a, long b) //Addition*/ { float erg; erg= a + (float)b; return erg; }
nur so geht leider die nachkommastelle von b verloren...kann wer helfen?
mfg
-
Erklär mir das mit der Nachkommastelle bei dem long int bitte nochmal genauer.
-
also ich soll über die add fkt werte einlesssen(über die parameter) die werte können auch ne kommastelle haben diese soll aber (falls vorhanden)trotzdem erhalten bleiben,auch wenn der wert als long parameter übergeben wird(deswegen sollen wir casten) aber sobald der wert als long übnergeben wird verschwindet ja die nachkommastelle...
-
long x = *(long*)&floatvalue; // float nach long floatvalue = *(float*)&x; // ...und wieder zurück
-
Wieso übergibst du überhaupt einen ganzzahligen Wert, wenn du die Nachkommastellen noch benötigst? (Ganzzahltypen wie int und long haben keine Nachkommastellen - und wenn du einen double/float nach long umwandelst, wird dessen Nachkomma-Anteil ersatzlos gestrichen)
// so könnt's gehen schrieb:
long x = *(long*)&floatvalue; // float nach long floatvalue = *(float*)&x; // ...und wieder zurück
Technisch könnte das vielleicht gehen, aber ist reichlich obskur (und systemabhängig) - ich würde sowas jedenfalls keinem empfehlen. Bau dir deine Funktion lieber so um, daß sie gleich einen float-Wert entgegennimmt.
-
CStoll schrieb:
// so könnt's gehen schrieb:
long x = *(long*)&floatvalue; // float nach long floatvalue = *(float*)&x; // ...und wieder zurück
Technisch könnte das vielleicht gehen, aber ist reichlich obskur (und systemabhängig) - ich würde sowas jedenfalls keinem empfehlen. Bau dir deine Funktion lieber so um, daß sie gleich einen float-Wert entgegennimmt.
klar ist das doof, aber er darf die funktion nicht ändern.