Show TOC 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, dass 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 ** pgleich 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

AchtungDiese Anweisungen sind obsolet und stehen nur noch aus Gründen der Kompatibilität zu Releases vor 4.6 bzw. 6.10 zur Verfügung. Die Anweisungen können in älteren Programmen noch gefunden werden, sollten aber nicht mehr verwendet werden.

 

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:

·        ADD-CORRESPONDING

·        SUBTRACT-CORRESPONDING

·        MULTIPLY-CORRESPONDING

·        DIVIDE-CORRESPONDING  

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-usamultipliziert usw.

Folgen von Feldern addieren

AchtungDiese Anweisung ist obsolet und steht nur noch aus Gründen der Kompatibilität zu Releases vor 4.6 bzw. 6.10 zur Verfügung. Die Anweisung kann in älteren Programmen noch gefunden werden, sollte aber nicht mehr verwendet werden.

 

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 n2 UNTIL nz GIVING m.

Wenn n1, n2, ... , nz 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 n2 UNTIL nz 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 sumzugewiesen. Dann wird der Inhalt der Komponenten n2 bis n6 summiert und zum Wert in sum addiert.

 

Ende des Inhaltsbereichs