Die COMPUTE-Anweisung

Mit Hilfe der COMPUTE-Anweisung können arithmetische Ausdrücke umgesetzt werden.
Man unterscheidet bei der COMPUTE-Anweisung zwischen Empfangs- und Rechenfeldern.

Empfangsfelder:
Diese werden zur Aufnahme des Ergebnisses der Anweisung verwendet und stehen daher links vom Gleichheitszeichen. Damit dies möglich ist, muß es sich folglich um numerische oder numerisch aufbereitete Datenfelder handeln.

Rechenfelder:
Diese Datenfelder sind direkt an der Rechenoperation beteiligt, wodurch auch klar wird, daß es sich hierbei um rein numerische Datenfelder handeln muß. Sie stehen rechts vom Gleichheitszeichen.

1. Neben den reinen Berechnungen kann COMPUTE ähnlich wie MOVE benutzt werden.
Beispiel:
COMPUTE Ergebnis = Summe
hat dieselbe Wirkung wie:
MOVE Summe TO Ergebnis

Dem Datenfeld 'Ergebnis' wird derselbe Wert wie dem Datenfeld 'Summe' zugewiesen.

2. Genauso kann man das Ergebnis einer Berechnung mit Hilfe von COMPUTE in ein Datenfeld übergeben:
Beispiel:
COMPUTE Ergebnis = Summe - Steuern

Zunächst wird 'Steuern' von 'Summe' abgezogen und die berechnete Differenz in das Feld 'Ergebnis' übertragen.

Zugelassene Operatoren:
+
Addieren
-
Subtrahieren
*
Multiplizieren
/
Dividieren
**
Potenzieren
nur ganzzahlige positive Werte


Auflösungsreihenfolge:
Bei Berechnungen verfolgt Cobol eine festgelegte Reihenfolge:

1. von links
nach rechts
2. Klammern
von innen nach außen
3. Vorzeichen
(+ und -)
4. Potenzierung
(positiv & ganzzahlig)
5. Multiplikation &
Division
6. Addition &
Subtraktion


Der ROUNDED-Zusatz:
Dieser Zusatz kann in jeder arithmetischen Operation als zusätzlicher Eintrag benutzt werden. Er wird immer dann benötigt, wenn ein Ergebnisfeld so kurz definiert ist, daß Dezimalstellen abgeschnitten werden. Es wird immer die letzte, zu Verfügung stehende Dezimalstelle gerundet und ein evtl. auftretender Übertrag auf die nächsthöhere Stelle aufaddiert.
Beispiel:
COMPUTE Promille = Menge / 1000


Wenn Menge den Wert 328 besitzt und Promille mit PIC 99V99. vordefiniert wurde, so ist das Ergebnis in Promille = 0,33. Grund: 328 / 1000 = 0,328 auf nächsthöhere Dezimalstelle gerundet = 0,33.

Der ON SIZE ERROR-Zusatz
Der ON SIZE ERROR-Zusatz spezifiziert eine Anweisung die im Falle eines Überlaufes ausgeführt wird.

Ein Überlauf tritt auf, wenn ein Ergebnis errechnet wird, das mehr Stellen von dem Komma aufweist, als das Ergebnisfeld aufnehmen kann. Ein solcher Überlauf sollte durch entsprechende Vorplanung verhindert werden. Ist aufgrund der Programmkonstellation ein Überlauf z.T. nicht vermeidbar, so kann er durch den ON SIZE ERROR-Zusatz aufgefangen werden.
Beispiel:
COMPUTE Promille = Wert * 10 ON SIZE ERROR PERFORM Fehler.


Der NOT ON SIZE ERROR-Zusatz
Genau wie ON SIZE ERROR-Zusatz(s.o.), nur mit dem Unterschied, daß hier eine Anweisung spezifiziert wird, die ausgeführt werden soll, wenn kein Überlauf stattgefunden hat.
Beispiel:
COMPUTE Promille = Wert * 10 NOT ON SIZE ERROR PERFORM Rechenbar.

...