Eine numerische Formel erstellen

In diesem Abschnitt:

Vorgehensweise:

Referenz:

Eine numerische Formel führt eine Berechnung durch, die numerische Konstanten, Felder, Operatoren und Funktionen verwendet, um einen numerischen Wert zurückzugeben. Wenn Sie eine numerische Formel verwenden, um einem Feld einen Wert zuzuweisen, muss dieses Feld ein numerisches Format haben. Das Defaultformat lautet D12.2.

Eine numerische Formel kann aus mehreren Komponenten bestehen, die unterhalb in Fettdruck zu sehen sind:

Bevor numerische Werte in Berechnungen verwendet werden, werden sie im Allgemeinen in das Format Doppelpräzision-Gleitkomma umgewandelt. Das Ergebnis wird dann umgewandelt in das angegebene Feldformat. In manchen Fällen führt die Umwandlung durch Rundung zu einem leicht unterschiedlichen Ergebnis. Beachten Sie, dass Umgebungen, die Arithmetik im systemeigenen Modus unterstützen, Rundung anders handhaben. Genaueres finden Sie unter Numerische Formeln mit Arithmetik im systemeigenen Modus auswerten.

Wenn eine Zahl zu groß (größer als 1075) oder zu klein (kleiner als 10-75) ist, erhalten Sie eine Überlauf- oder Unterlaufwarnung, und es werden für den Feldwert Sternchen angezeigt.

Hinweis: Sie können das Überlaufzeichen ändern, indem Sie den Befehl SET OVERFLOWCHAR ausgeben.

Genaue Informationen über das Rundungsverhalten für numerische Formate finden Sie im Handbuch Daten mit der WebFOCUS-Sprache beschreiben .


Nach oben

x
Syntax: Eine Zahl in wissenschaftlicher Schreibweise ausdrücken

Verwenden Sie in einer IF-Klausel Folgendes:

IF field op n[.nn]{E|D|e|d}[+|-]p 

Verwenden Sie in einer WHERE-Klausel Folgendes:

WHERE field op EXPN(n[.nn{E|D|e|d}[+|-]p);

Verwenden Sie in einem COMPUTE-Befehl Folgendes:

COMPUTE field[/format] = EXPN(n[.nn]{{E|D|e|d}[+|-]p);

Verwenden Sie in einem DEFINE-Befehl Folgendes:

DEFINE FILE filename 
field[/format] = EXPN(n[.nn]{E|D|e|d}[+|-]p);
END

Verwenden Sie in einem DEFINE in der Masterdatei Folgendes:

DEFINE field[/format] = EXPN(n[.nn]{{E|D|e|d}[+|-]p);

Hierbei gilt:

field
Ist ein Feld in einer Anfrage.
/format
Ist das optionale Format des Feldes. Informationen über Formate finden Sie im Handbuch Daten mit der WebFOCUS-Sprache beschreiben .
op
Ist ein Vergleichsoperator in einer Anfrage.
n.nn
Ist eine numerische Konstante, die aus einer ganzzahligen Komponente besteht, gefolgt von einem Dezimaltrennzeichen, gefolgt von einer Bruchkomponente.
E, D, e, d
Kennzeichnet wissenschaftliche Schreibweise. E, e, d und D sind austauschbar.
+, -
Gibt an, ob p positiv oder negativ ist. Positiv ist der Default.
p
Ist die Zehnerpotenz, um die die Zahl erhöht werden soll. Der Wertebereich für p liegt zwischen -78 und +78 auf z/OS, zwischen -99 und +99 anderswo.

Hinweis: EXPN ist hilfreich für Berechnungen mit Feldern mit F- und D-Formaten. Es ist im Allgemeinen nicht hilfreich f[r Berechnungen mit Feldern in den Formaten P oder I.



Beispiel: Eine Zahl in wissenschaftlicher Schreibweise auswerten

Sie können wissenschaftliche Schreibweise in einer IF- oder WHERE-Klausel verwenden, um 8000 als 8E+03 auszudrücken:

IF RCOST LT 8E+03
WHERE RCOST LT EXPN(8E+03)

Nach oben

x
Referenz: Arithmetische Operatoren

In der folgenden Liste sehen Sie die arithmetischen Operatoren, die Sie in einer Formel verwenden können:

Addition

+

Subtraktion

-

Multiplikation

*

Teilung

/

Potenzierung

**

Hinweis: Wenn Sie durch 0 teilen möchten, ist der Wert der Formel 0. Multiplikation und Potenzierung werden für keinerlei Datumsformeln unterstützt. Um Teil eines Datums zu isolieren, verwenden Sie einen einfachen Zuweisungsbefehl.



x
Auswertungsreihenfolge

Numerische Formeln werden in der folgenden Reihenfolge ausgewertet:

  1. Potenzierung.
  2. Division und Multiplikation.
  3. Addition und Subtraktion.

Wenn zwei Operatoren gleichrangig sind, werden Sie von links nach rechts ausgewertet. Weil Formeln in Klammern vor allen anderen ausgewertet werden, können Sie Klammmern verwenden, um die Reihenfolge zu verändern. Die folgenden Formeln haben z. B. aufgrund der Klammern unterschiedliche Ergebnisse.

COMPUTE PROFIT/D12.2  =  RETAIL_PRICE  -  UNIT_COST  *  UNIT_SOLD ;
COMPUTE PROFIT/D12.2  = (RETAIL_PRICE  -  UNIT_COST) *  UNIT_SOLD ;

Beim ersten Ausdruck wird UNIT_SOLD zunächst mit UNIT_COST multipliziert und das Ergebnis dann von RETAIL_PRICE abgezogen. In der zweiten Formel wird zunächst UNIT_COST von RETAIL_PRICE subtrahiert, und dieses Ergebnis wird mit UNIT_SOLD multipliziert.

Hinweis: Es können nicht zwei Operatoren gleichzeitig angezeigt werden. Der folgende Ausdruck ist nicht gültig:

a * -1

Damit er gültig wird, müssen Klammern hinzugefügt werden:

a* (-1)


Beispiel: Die Auswertungsreihenfolge steuern

Die Auswertungsreihenfolge kann sich auf das Ergebnis einer Formel auswirken. Nehmen wir an, Sie möchten den Verlust in Dollar bestimmen, der im Einzelhandel durch die Rückgabe von beschädigten Artikeln entstanden ist. Sie könnten die folgende Anfrage ausgeben:

TABLE FILE SALES
PRINT RETAIL_PRICE RETURNS DAMAGED
COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * RETURNS + DAMAGED;
BY PROD_CODE
WHERE PROD_CODE IS 'E1';
END

Die Berechnung

COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * RETURNS + DAMAGED;

führt zu einem falschen Ergebnis, da RETAIL_PRICE zuerst mit RETURNS multipliziert wird, und das Ergebnis dann DAMAGED hinzugefügt wird. Das richtige Ergebnis erhalten Sie, indem Sie DAMAGED RETURNS hinzufügen, und dann das Ergebnis mit RETAIL_PRICE multiplizieren.

Sie können die Auswertungsreihenfolge ändern, indem Sie Formeln in Klammern setzen. Eine Formel in Klammern wird vor den anderen Formeln ausgewertet. Sie können auch Klammern verwenden, um die Lesbarkeit zu verbessern.

Mit Klammern lautet die richtige Syntax für die vorherige Berechnung wie folgt:

COMPUTE RETAIL_LOSS/D12.2 = RETAIL_PRICE * (RETURNS + DAMAGED);

Die Ausgabe ist:

PROD_CODE  RETAIL_PRICE  RETURNS  DAMAGED     RETAIL_LOSS
---------  ------------  -------  -------     -----------
E1                 $.89        4        7            9.79

Nach oben

x
Numerische Formeln mit Arithmetik im systemeigenen Modus auswerten

Wenn Arithmetik im systemeigenen Modus verwendet wird, wird ein bestimmter Bewertungspfad befolgt für jede numerische Formel basierend auf dem Format der Operanden und der Operatoren. Wenn die Operanden alle dasselbe Format haben, werden die meisten Operationen in diesem Format durchgeführt. Wenn die Operanden unterschiedliche Formate haben, werden die Operanden in eine gemeinsames Format umgewandelt, wobei die Formate in einer bestimmten Reihenfolge Vorrang haben. Unabhängig von den Operand-Formaten, benötigen manche Operatoren Umwandlung in bestimmte Formate, so dass sich alle Operanden im geeigneten Format befinden.


Nach oben

x
Identische Operand-Formate mit Arithmetik im systemeigenen Modus verwenden

Wenn alle Operanden eines numerischen Operators dasselbe Format haben, können Sie die folgende Tabelle verwenden, um zu bestimmen, ob die Operationen in diesem systemeigenen Format durchgeführt werden, oder ob die Operanden umgewandelt werden, bevor und nachdem die Operation durchgeführt wird. In jedem Fall, der Umwandlung benötigt, werden Operanden in das operationale Format umgewandelt, und das zwischenzeitliche Ergebnis wird im operationalen Format zurückgegeben. Wenn das Format des Ergebnisses sich unterscheidet von dem Format der Zielvariable, wird das Ergebnis umgewandelt in das Format der Zielvariable.

Operation

 

Operationales Format

Addition

+

systemeigen

Subtraktion

-

systemeigen

Multiplikation

*

systemeigen

Vollständige Teilung

/

Akzeptiert Einfach- oder Doppelpräzision-Gleitkomma, wandelt alle anderen in Doppelpräzision-Gleitkomma um

Potenzierung

**

Doppelpräzision-Gleitkomma



Beispiel: Identische Operand-Formate (Arithmetik im systemeigenen Modus) verwenden

Die folgenden Variablen werden in WebFOCUS Maintain als ganze Zahlen definiert:

COMPUTE OPERANDONE/I4  ;
        OPERANDTWO/I4  ;
        RESULT/I4  ;

Die erforderliche Multiplikation wird mit Arithmetik im systemeigenen Modus durchgeführt (ganze Zahl Arithmetik):

COMPUTE RESULT/I4 = OPERANDONE * OPERANDTWO  ;

Nach oben

x
Unterschiedliche Operand-Formate mit Arithmetik im systemeigenen Modus verwenden

Wenn Operanden eines numerischen Operators unterschiedliche Formate haben, verwenden Sie die folgende Tabelle, um zu bestimmen, welches das gemeinsame Format ist, nachdem sie umgewandelt werden. Der niedrigere Operand wird umgewandelt in das Format des höheren Operanden, der die Operation durchführt.

Reihenfolge

Format

1

16-Byte gepackte Dezimalzahl

2

Doppelpräzision-Gleitkomma

3

8-Byte gepackte Dezimalzahl

4

Einfachpräzision-Gleitkomma

5

Ganze Zahl (Integer)

6

Zeichen (alphanumerisch und Text)

Wenn beispielsweise ein 16-Byte gepackte Dezimalzahl-Operand in einer Formel verwendet wird, werden alle anderen Operanden für die Auswertung in das Format 16-Byte gepackte Dezimalzahl umgewandelt. Wenn hingegen eine Formel nur ganzzahlige und alphanumerische Operanden enthält, werden alle alphanumerischen Operanden in das Ganze Zahl-Format umgewandelt.

Ein Zeichenwert (d.h. alphanumerisch oder Text) kann in einer Berechnung verwendet werden, wenn es sich um eine numerische Zeichenfolge handelt. Es wird ein Versuch unternommen, den Zeichenoperand in das Format des anderen Operanden in der Formel umzuwandeln. Wenn beide Operanden zeichen sind, wird der Versuch unternommen, sie in Doppelpräzision umzuwandeln. Wenn die Umwandlung nicht möglich ist, wird eine Fehlermeldung ausgegeben.

Wenn Sie einer ganzen Zahl einen Dezimalwert zuweisen, werden die Dezimalstellen abgeschnitten.


WebFOCUS