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:
COMPUTE COUNT/I2 = 1 ;
COMPUTE COST/D12.2 = EXPN(8E+3);
Informationen über Syntaxgebrauch finden Sie unter Eine Zahl in wissenschaftlicher Schreibweise ausdrücken.
COMPUTE RECOUNT/I2 = COUNT ;
COMPUTE BONUS/D12.2 = CURR_SAL * 0.05 ;
Eine Liste mit arithmetischen Operatoren finden Sie unter Arithmetische Operatoren.
COMPUTE LONGEST_SIDE/D12.2 = MAX (WIDTH, HEIGHT) ;
COMPUTE PROFIT/D12.2 = (RETAIL_PRICE - UNIT_COST) * UNIT_SOLD ;
Beachten Sie die Verwendung von Klammern, um die Auswertungsreihenfolge der Formel zu ändern. Informationen über die Reihenfolge, in der numerische Operationen durchgeführt werden, finden Sie unter Auswertungsreihenfolge.
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 .
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:
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.
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)
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.
Numerische Formeln werden in der folgenden Reihenfolge ausgewertet:
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)
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
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.
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 |
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 ;
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 |