Anfang des Inhaltsbereichs

Arithmetische Berechnungen Dokument im Navigationsbaum lokalisieren

Arithmetische Berechnungen beruhen auf arithmetischen Operatoren und speziellen ABAP-Anweisungen.

Grundrechenarten

ABAP unterstützt die vier Grundrechenarten sowie die Potenzrechnung. Es können folgende arithmetische Operatoren in einem mathematischen Ausdruck verwendet werden:

Operator

Bedeutung

+

Addition

-

Subtraktion

*

Multiplikation

/

Division

DIV

Ganzzahldivision

MOD

Rest von Ganzzahldivision

**

Potenzieren

Anstelle von arithmetischen Ausdrücken mit Operatoren können auch die Schlüsselwörter ADD, SUBTRACT, MULTIPLY und DIVIDE für die Grundrechenarten benutzt werden.

Die folgende Tabelle zeigt die alternativen Anweisungen für die Grundrechenarten in ABAP:

Operation

Anweisung mit

math. Ausdruck

Anweisung mit

Schlüsselwort

Addition

<p> = <n> + <m>.

ADD <n> TO <m>.

Subtraktion

<p> = <m> - <n>.

SUBTRACT <n> FROM <m>.

Multiplikation

<p> = <m> * <n>.

MULTIPLY <m> BY <n>.

Division

<p> = <m> / <n>.

DIVIDE <m> BY <n>.

Ganzzahldivision

<p> = <m> DIV <n>.

---

Rest

<p> = <m> MOD <n>.

---

Potenzieren

<p> = <m> ** <n>.

---

In den Anweisungen mit Schlüsselwörtern werden die Ergebnisse der Operationen dem Feld <m> zugewiesen.

Die Operanden <m>, <n>, <p> können beliebige numerische Felder sein. Wenn die Felder nicht denselben Datentyp haben, konvertiert das System vor der Operation alle Felder in den hierarchisch höchsten vorkommenden Datentyp.

Bei der Verwendung von arithmetischen Ausdrücken ist zu beachten, daß die Operatoren +, -, *, ** und / sowie die öffnenden und schließenden Klammern in ABAP Wörter sind, denen Leerzeichen voran- und nachgestellt werden müssen.

Bei Divisionen darf der Divisor nicht Null sein, wenn der Dividend nicht Null ist. Für Ganzzahldivision verwendet man die Operatoren DIV oder MOD anstelle von /. DIV berechnet den ganzzahligen Quotienten, MOD berechnet den Rest.

Bei der Kombination von arithmetischen Ausdrücken, werden Berechnungen für gleichrangige Operatoren von links nach rechts durchgeführt, mit einer Ausnahme: Das Potenzieren wird von rechts nach links durchgeführt. Deshalb ist <n> ** <m> ** <p> gleich <n> ** ( <m> ** <p> ) und nicht gleich ( <n> ** <m> ) ** <p>

Beispiel

DATA: counter TYPE i.

COMPUTE counter = counter + 1.

counter = counter + 1.

ADD 1 TO counter.

In diesem Beispiel führen die drei Anweisungen dieselbe Rechenoperation durch, d.h., sie addieren 1 zum Inhalt des Feldes COUNTER und weisen das Ergebnis dem Feld COUNTER zu.

Beispiel

DATA: pack TYPE p DECIMALS 4,
      n TYPE f VALUE '+5.2',
      m TYPE f VALUE '+1.1'.

pack = n / m.
WRITE pack.

pack = n DIV m.
WRITE  / pack.

pack = n MOD m.
WRITE / pack.

Ausgabe:

           4.7273

           4.0000

           0.8000

Dieses Beispiel zeigt die verschiedenen Divisionsarten.

Arithmetische Berechnungen mit Strukturen

Entsprechend der komponentenweisen Übertragung von Werten zwischen Strukturen mit MOVE-CORRESPONDING können mit folgenden Schlüsselwörtern komponentenweise arithmetische Operationen mit Strukturen durchgeführt werden:

ABAP führt die entsprechenden Rechenoperationen für alle gleichnamigen Komponenten zweier Strukturen durch. Jedoch sind diese Operationen natürlich nur dann sinnvoll, wenn alle betroffenen Komponenten einen numerischen Datentyp haben.

Beispiel

DATA: BEGIN OF rate,

         usa TYPE f VALUE '0.6667',

         frg TYPE f VALUE '1.0',

         aut TYPE f VALUE '7.0',

      END OF rate.

 

DATA: BEGIN OF money,
         usa TYPE i VALUE 100,
         frg TYPE i VALUE 200,
         aut TYPE i VALUE 300,
      END OF money.

MULTIPLY-CORRESPONDING money BY rate.

WRITE / money-usa.
WRITE / money-frg.
WRITE / money-aut.

Ausgabe:

        67

       200

     2,100

In diesem Beispiel wird MONEY-USA mit RATE-USA multipliziert usw.

Folgen von Feldern addieren

Die ADD-Anweisung hat einige Varianten für die Addition von Folgen von Feldern im Speicher, zum Beispiel:

Addieren einer Folge von Feldern und Zuweisung des Ergebnisses an ein anderes Feld:

ADD <n1> THEN <n 2> UNTIL <n z> GIVING <m>.

Wenn <n 1 >, <n 2 >, ... , <n z > eine Folge von Feldern mit gleichem Abstand zueinander sowie demselben Typ und derselben Länge im Speicher ist, werden diese Felder addiert. Das Ergebnis wird <m>zugewiesen.

Addieren einer Folge von Feldern und Addieren des Ergebnisses zum Inhalt eines anderen Feldes:

ADD <n1> THEN <n 2> UNTIL <n z> TO <m>.

Diese Anweisung funktioniert genauso wie die vorhergehende mit einem Unterschied: Die Summe der Felder wird zum alten Inhalt von <m> addiert.

Informationen zu weiteren ähnlichen Varianten finden sich in der Schlüsselwortdokumentation der ADD-Anweisung.

Beispiel

DATA: BEGIN OF series,
n1 TYPE i VALUE 10,
n2 TYPE i VALUE 20,
n3 TYPE i VALUE 30,
n4 TYPE i VALUE 40,
n5 TYPE i VALUE 50,
n6 TYPE i VALUE 60,
END OF series.

DATA sum TYPE i.

ADD series-n1 THEN series-n2 UNTIL series-n5 GIVING sum.
WRITE sum.

ADD series-n2 THEN series-n3 UNTIL series-n6 TO sum.
WRITE / sum.

Ausgabe

       150

       350

In diesem Beispiel wird der Inhalt der Komponenten N1 bis N5 addiert und dem Feld SUM zugewiesen. Dann wird der Inhalt der Komponenten N2 bis N6 summiert und zum Wert in SUM addiert.

Ende des Inhaltsbereichs