Arithmetische Berechnungen beruhen auf arithmetischen Operatoren und speziellen ABAP-Anweisungen.
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
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.
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.
Diese 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.
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.
Diese 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.
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.