float hat die unangenehme Eigenschaft, daß Das seeehr genau ist - aber eben nicht ganz genau.
Wenn Du nun der Float-Variable den Wert 45 zuweist, wird Da intern wohl 44.9999999999999999925635452 draus (oder Ähnlich).
Für INT werden einfach nur die Nachkommastellen abgeschnitten - über bleibt 44.
Bei der 44 wird's 44.00011011023452 sein (wieder 'oder Ähnlich')
warum 45 nicht genau 45 ist, ist mir nicht klar.
Das Problem trat auf, weil ich von einem Wert, z.B. 123.45 jeweils die Vor- und Nachkommastellen als Integer benötige - und zwar genau, nicht ungefähr 45...
Wie stelle ich das an?
Wieso hast du das nicht gleich gesagt. Das ist etwas völlig anderes!
123.45 ist eigentlich 123.4499969482421875
Siehe mein Link. Und lies vielleicht mal etwas mehr über IEEE-754. Vereinfacht gesagt hast du den Fall dass eine unendliche Anzahl an Zahlen mit einer auf 32 Bit begrenzten Anzahl von Werten dargestellt werden müssen. Dabei kommst es zu Rundungsfehlern weil es nicht für alle Zahlen eine passende Bit-Darstellung gibt
Als Lösung musst vor dem Cast auf Integer richtig runden