@maw_hn
Es kommt eben auf den Wertbereich an, der in die Variable rein soll.
bei Integer sind es 65536.
Bei Float hat man halt das Problem mit den Rundungsfehlern.

Eventuell würde ja auch eine Long Variable reichen, dann müsste das Kommando atol benutzt werden.

Zum Problem mit dem String.
Am Ende des Strings wird doch immer ein <CR> bzw. <CR>,<LF> ausgegeben.
Du startest die Aufzeichnung des Strings mit dem $ und zeichnest alles auf, bis ein <LF> kommt.
Ist dieses Da wird der komplette String ausgewertet.
CRC usw.
Ein $ veranlasst den Stringzähler dazu imme auf Position 0 zu springen.
Somit werden nur gültige Strings ausgewertet und es ist immer nur einer im Buffer.
Ist es dein gewünschtes Positionskommando angekommen, werden die Daten aus dem String geholt und für die weitere Verarbeitung abgespeichert.