Dienstag, 30. April 2013

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.

Kommentare:

  1. Sehr gute Beispiele und gut erklärt. Habe ich gleich mal im Testprogramm probiert.

    Nur bei den Funktionen MOD und DIV ist es genau umgekehrt. MOD liefert den Rest und DIV die ganze Zahl. Jedenfalls bei unserem SAP System.

    AntwortenLöschen
  2. Hallo, vielen Dank für das Feedback - und Recht haben Sie auch. Ich habe das gleich ausgebessert.

    Viele Grüße

    Armin Bittner

    AntwortenLöschen