Man kommt ja häufig in die Verlegenheit Zahlen in ABAP auf-/ ab- oder kaufmännisch runden zu müssen, deshalb hier eine kurze Übersicht der Möglichkeiten:
Funktionsbaustein ROUND: relativ simpel zu bedienen, Zahl rein, Art der Rundung angeben und Anzahl Dezimalstellen, Zahl wieder raus
Ansonsten kann man auch eingebaute Funktionen nutzen. Als Beispiel hier ein Auszug aus der Dokumentation zu COMPUTE:
DATA: I TYPE I,
P TYPE P DECIMALS 2,
M TYPE F VALUE ‚-3.5‘,
D TYPE P DECIMALS 1.
P = ABS( M ). “ 3,5
=> ABS eliminiert das Vorzeichen
I = P. “ 4 – kaufmännisch gerundet
I = M. “ -4
=> die Zuweisung von einem Feld mit Nachkommastellen an eine Ganzzahl I führt automatisch zur kaufmännischen Rundung
I = CEIL( P ). “ 4 – nächstgrößere ganze Zahl
I = CEIL( M ). “ -3
=> CEIL rundet auf auf die nächste ganze Zahl
I = FLOOR( P ). “ 3 – nächstniedrige ganze Zahl
I = FLOOR( M ). “ -4
=> FLOOR rundet ab auf die nächste ganze Zahl
I = TRUNC( P ). “ 3 – ganzzahliger Teil
I = TRUNC( M ). “ -3
=> TRUNC liefert Teil vor dem Komma
D = FRAC( P ). “ 0,5 – Dezimalteil
D = FRAC( M ). “ -0,5
=> FRAC liefert Teil nach dem Komma
Zu guter Letzt sei auch die Division mit DIV und MOD erwähnt.
DIV und MOD liefern das Ergebnis der ganzzahligen Division oder anders formuliert die Antwort auf die Frage „wie oft passt A ganz in B und was bleibt dann übrig“?
Beispiel:
7,3 / 2,4 => 3 * 2,4 = 7,2 => also passt 2,4 genau 3mal in 7,3 ohne Nachkommastellen
7,3 – 7,2 = 0,1 => das ist der Rest der dabei übrig bleibt
DIV steht dabei für die ganze Zahl, also 3 im Beispiel und MOD für den Rest, also 0,1.
Zum Ausprobieren:
DATA: A1 TYPE P DECIMALS 2, A2 TYPE P DECIMALS 2.
DATA: F1 TYPE P DECIMALS 2 VALUE ‚7.3‘, F2 TYPE P DECIMALS 2 VALUE ‚2.4‘.
A1 = F1 MOD F2.
A2 = F1 DIV F2.
WRITE: A1, ‚-‚, A2.