Der ABS ist drin, da ich ja die Nachkommastelle immer positiv haben will.
Na, ich bin mir nicht sicher, ob das für Deine Aufgabe richtig ist ...
Machst Du in der Visu zwei getrennte Ausgabefelder für Byte1 und Byte2 nebeneinander?
Falls Du aus den Byte1 und Byte2 die Realzahl wieder zusammensetzen willst, dann verkompliziert Dein ABS die ganze Sache. Dann müßtest Du die nun vorzeichenlose Nachkommastelle abhängig vom Vorzeichen des Byte1 addieren (bei +) oder subtrahieren (bei -).
Bei einfach immer nur zusammenaddieren ergibt sich z.B. folgendes:
Code:
Byte1 | Byte2 Byte1 + (Byte2/10.0)
Ohne ABS: -1.5 ---> -1 | -5 ---> -1.5
[COLOR="Red"]Mit ABS[/COLOR]: -1.5 ---> -1 | +5 ---> [COLOR="Red"]-0.5 !!![/COLOR]
Ehrlich gesagt gefällt mir der einfache Weg über einen verzehnfachten INT besser als Dein kompliziertes Eigenformat (siehe #6). Ein INT kann auch leicht in 2 Byte zerlegt und wieder zusammengesetzt werden.
Da fällt mir noch eine Verbesserung ein: die Nachkommastelle sollte unter Berücksichtigung eventuell folgender weiterer Nachkommastellen gerundet werden, damit z.B. 1.48 in 1 und 5 zerlegt wird und dann als 1.5 angezeigt wird. Achtung: dann muß man auch dafür sorgen, daß -1.98 in -2 und 0 zerlegt wird!
Gibt es in Deinem Programmiersystem auch eine RND-Funktion (Runden und wandeln in Ganzzahl)?
Code:
temp_INT := RND(Realwert * 10.0) ;
Byte1 := temp_INT / 10 ;
Byte2 := temp_INT MOD 10 ;
Alternativ geht's auch so, allerdings kennt diese Formel nicht die Geradzahl-Rundungsregel:
Code:
temp_INT := TRUNC((Realwert * 10.0) + (Realwert / ABS(Realwert) / 2.0)) ;
Byte1 := temp_INT / 10 ;
Byte2 := temp_INT MOD 10 ;
(habe zur Verdeutlichung der Rechenreihenfolge mal zusätzliche Klammern gesetzt)
Wenn Du die Nachkommastelle tatsächlich vorzeichenlos brauchst, dann eben so:
Code:
...
Byte2 := ABS(temp_INT MOD 10) ;
Harald