ABAP – Zahlen auf-/ ab- oder kaufmännisch runden

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.

Wollen Sie ab sofort per Mail über neue Beiträge informiert werden? Dann tragen Sie sich in unsere Mailingliste ein. Dieser Service ist für Sie natürlich kostenlos.