Ist zwar ewig her, aber ich möchte es trotzdem noch erwähnen: Der korrigierte Code oben hat zwei Probleme. Er prüft nicht, ob evtl. Grenzen verletzt werden und vor allem wirft er eine
Exception bei negativen Werten, die im TW_FIX32 eine Nachkommastelle haben. (Also z.B. -3,5 wirft
Exception während -3 geht)
Code:
if floater<low(TW_INT16) then floater:=low(TW_INT16);
if floater>high(TW_INT16) then floater:=high(TW_INT16);
Result.Whole:=trunc(floater);
Result.Frac:=trunc(frac(abs(floater))*65536.0);
Natürlich könnte man selbst eine
Exception raisen, wenn floater den möglichen Bereich des TW_FIX32 verletzt, aber ich hab einfach mal das Minimum bzw. das Maximum angenommen.