Konvertiere Integer nach Floatingpoint und zurück
-
Hallo zusammen.
Kann ich eigentlich sicher sein, dass eine Integerzahl, die ich in ein "float" caste und dann wieder zurück nach "int" caste nach diesem Umweg wieder den gleichen Wert hat?
Meine Überlegung ist, dass der cast von "float" nach "int" die Nachkommastellen abschneidet, andererseits aber bestimmte Brüche nicht exakt als "float" dargestellt werden können. Könnte es also vorkommen, dass z.B. (int) 23 nach dem cast (float) 22.9999...9 ist und nach einem cast zurück nach int dann (int) 22 ergbit?Hintergrund dieser Frage ist, kann ich mit Hilfe von "round()" eine Floatingpointzahl in einen (kaufmännisch) gerundeten "int" umwandeln?
LG, J.
-
ganzzahlen können in float korrekt ausgedrückt werden, da ungenauigkeiten nur im nachkommaanteil entstehen
-
Bist du dir sicher damit? Dann wandel mal LONG_MAX in float und wieder zurück und vergleiche die Werte.
Oder anders: für kleine int-Werte sollte es keine Probleme mit der Konvertierung geben. Erst wenn du die Breite der Mantisse sprengst, hast du Rundungsfehler, die sich bemerkbar machen können (und die im Extremfall größer werden können als +/- 1).
-
Hallöle,
Ganzzahlen nach float/double als Zahl ohne Rundungsabweichung geht nicht immer, zB nicht bei der simplen 1 (Wenn ich mich recht erinnere).
Kaufmännisch Runden ist ganz einfach:
float x,y = 3.1415926;
x = int(y*100 + 0.5)/100.0Gruss Jerry
