Version 4.2.6
 —  Statements  —

DIVIDE

Dieses Dokument behandelt folgende Themen:

Verwandte Statements: ADD | COMPRESS | COMPUTE | EXAMINE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT

Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen


Funktion

Mit dem Statement DIVIDE können Sie einen Operanden durch einen anderen dividieren.

Division durch Null:

Wird eine Division durch Null (0) versucht, d.h. wenn der Divisor (operand1), also die Zahl durch die geteilt wird, 0 ist, wird entweder eine entsprechende Fehlermeldung oder als Ergebnis 0 ausgegeben, je nachdem wie der Session-Parameter ZD (der in der Parameter-Referenz-Dokumentation beschrieben ist) gesetzt ist.

Seitenanfang

Syntax-Beschreibung

Für dieses Statement sind verschiedene Strukturen möglich:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Syntax 1 — DIVIDE ohne GIVING-Klausel

DIVIDE [ROUNDEDoperand1 INTO operand2

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N   N P I F               ja nein
operand2 C S A   M   N P I F               ja nein

Syntax-Element-Beschreibung:

operand1 INTO operand2
Operanden:

operand1 ist der Divisor, operand2 ist der Dividend. Das Ergebnis wird in operand2 (Ergebnisfeld) ausgegeben, daher sieht das Statement wie folgt aus:

<oper2> := <oper2> / <oper1>

Das Ergebnisfeld kann ein Datenbankfeld oder eine Benutzervariable sein. Wenn operand2 eine Konstante oder eine nicht änderbare Natural- Systemvariable ist, ist die GIVING-Klausel erforderlich. Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand2) ausgewertet.

ROUNDED Wenn Sie das Schlüsselwort ROUNDED angeben, wird das Ergebnis gerundet.

Syntax 2 — DIVIDE-Statement mit GIVING-Klausel

DIVIDE [ROUNDEDoperand1 INTO operand2  [GIVING   operand3]

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N     N P I F               ja nein
operand2 C S A   N     N P I F               ja nein
operand3   S A     A U N P I F B*    T         ja ja

* Format B von operand3 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.

Syntax-Element-Beschreibung:

operand1 INTO operand2 GIVING operand3
Operanden:

operand1 ist der Divisor, operand2 ist der Dividend. Das Ergebnis wird in operand3 (Ergebnisfeld) ausgegeben, folglich sieht das Statement wie folgt aus:

<oper3> := <oper2> / <oper1>

Wird ein Datenbankfeld als Ergebnisfeld verwendet, ändert sich durch die Division lediglich der programmintern verwendete Wert des Feldes; der in der Datenbank gespeicherte Wert des Feldes wird davon nicht berührt.

Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand3) ausgewertet.

Informationen zur Genauigkeit der Ergebnisse siehe Abschnitt Genauigkeit von Ergebnissen bei arithmetischen Operationen im Leitfaden zur Programmierung.

ROUNDED Wenn Sie das Schlüsselwort ROUNDED angeben, wird das Ergebnis gerundet.

Syntax 3 — DIVIDE-Statement mit REMAINDER-Option

DIVIDE   operand1  INTO operand2  [GIVING   operand3]   REMAINDER   operand4

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S A   N     N P I                 ja nein
operand2 C S A   N     N P I                 ja nein
operand3   S A     A U N P I F B*   T         ja ja
operand4   S A     A U N P I F B*   T         ja ja

* Format B von operand3 und operand4 kann nur mit einer Länge von kleiner gleich 4 verwendet werden.

Syntax-Element-Beschreibung:

operand1
Divisor:

operand1 ist der Divisor, d.h. die Anzahl oder Menge, durch die der Dividend dividiert werden soll, um den Quotienten zu erhalten.

operand2
Ergebnisfeld:

Wird die GIVING-Klausel nicht benutzt, wird das Ergebnis in operand2 ausgegeben. Das Ergebnisfeld kann ein Datenbankfeld oder eine Benutzervariable sein.

Wenn operand2 eine Konstante oder eine nicht änderbare Natural- Systemvariable ist, ist die GIVING-Klausel erforderlich.

ROUNDED

Wenn Sie das Schlüsselwort ROUNDED angeben, wird das Ergebnis gerundet.

GIVING operand3

Wenn das Schlüsselwort GIVING benutzt wird, wird operand2 nicht geändert, und das Ergebnis wird in operand3 ausgegeben.

Wird ein Datenbankfeld als Ergebnisfeld verwendet, ändert sich durch die Division lediglich der programmintern verwendete Wert des Feldes; der in der Datenbank gespeicherte Wert des Feldes wird davon nicht berührt.

Die Anzahl der Dezimalstellen für das Ergebnis der Division wird vom Ergebnisfeld (d.h. operand2, wenn keine GIVING-Klausel benutzt wird, oder operand3, wenn die GIVING-Klausel benutzt wird) ausgewertet.

Informationen zur Genauigkeit der Ergebnisse siehe Abschnitt Genauigkeit von Ergebnissen bei arithmetischen Operationen im Leitfaden zur Programmierung.

REMAINDER operand4

Das Schlüsselwort REMAINDER bewirkt, dass der nach einer (ungerundeten) Division verbleibende Rest in operand4 ausgegeben wird.

Wenn GIVING und REMAINDER benutzt werden, kann keiner der vier Operanden ein Array-Bereich sein.

Intern wird der Rest wie folgt berechnet:

  1. Der Quotient der Division von operand1 und operand2 wird berechnet.

  2. Der Quotient wird mit operand1 multipliziert.

  3. Das Produkt dieser Multiplikation wird von operand2 subtrahiert.

  4. Das Ergebnis dieser Subtraktion wird operand4 zugewiesen.

Für jeden dieser Schritte gelten die im Abschnitt Genauigkeit von Ergebnissen bei arithmetischen Operationen im Leitfaden zur Programmierung beschriebenen Regeln.

Seitenanfang

Beispiel

** Example 'DIVEX1': DIVIDE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (N7) INIT <20>                                                     
1 #B (N7)                                                               
1 #C (N3.2)                                                             
1 #D (N1)                                                               
1 #E (N1) INIT <3>                                                      
1 #F (N1)                                                               
END-DEFINE                                                              
*                                                                       
DIVIDE 5 INTO #A                                                      
WRITE NOTITLE 'DIVIDE 5 INTO #A' 20X '=' #A                             
*                                                                       
RESET INITIAL #A                                                        
DIVIDE 5 INTO #A GIVING #B                                          
WRITE 'DIVIDE 5 INTO #A GIVING #B' 10X '=' #B                           
*                                                                       
DIVIDE 3 INTO 3.10 GIVING #C
WRITE 'DIVIDE 3 INTO 3.10 GIVING #C' 8X '=' #C        
*                                                     
DIVIDE 3 INTO 3.1 GIVING #D                     
WRITE 'DIVIDE 3 INTO 3.1 GIVING #D' 9X '=' #D         
*                                                     
DIVIDE 2 INTO #E REMAINDER #F                    
WRITE 'DIVIDE 2 INTO #E REMAINDER #F' 7X '=' #E '=' #F
*                                                     
END

Ausgabe des Programms DIVEX1:

DIVIDE 5 INTO #A                    #A:        4 
DIVIDE 5 INTO #A GIVING #B          #B:        4 
DIVIDE 3 INTO 3.10 GIVING #C        #C:    1.03  
DIVIDE 3 INTO 3.1 GIVING #D         #D:  1       
DIVIDE 2 INTO #E REMAINDER #F       #E:  1 #F:  1

Seitenanfang