Numerische Datentypen

EGL bietet eine Vielzahl an numerischen Datentypen. Einige numerische Datentypen (beispielsweise BIGINT und FLOAT) geben die Länge und die Anzahl der Dezimalstellen automatisch an. Bei anderen numerischen Typen (beispielsweise BIN und DECIMAL) müssen Sie die Länge und (gegebenenfalls) die Anzahl der Dezimalstellen selbst angegeben, wie im folgenden Beispiel:

truckMileage BIN(9,2);             // 9 Ziffern, zwei Dezimalstellen
DataItem zipCode INT
  { validValues = [00000,99999]};  // nur 5 Ziffern
myZipCode zipcode;	

EGL ordnet Speicher für 'truckMileage' und 'myZipCode' zu, nicht jedoch für das Datenelement 'zipCode', bei dem es sich lediglich um ein Modell handelt.

Tabelle 1. Numerische EGL-Basiselementtypen
Basiselement Größe Länge angeben Dezimalstellen Datentyp DB2-Äquivalent
BIGINT 18 Ziffern (8 Byte) N N Binär BIGINT
BIN 4, 9 oder 18 Ziffern (2, 4 oder 8 Byte) J J Binär Nicht verfügbar
DECIMAL

18 oder 31 Ziffern (COBOL)
32 Ziffern (JAVA)

J J Gepacktes Dezimalformat DECIMAL
FLOAT 18 Ziffern (8 Byte) N J Gleitkomma mit doppelter Genauigkeit FLOAT
INT 9 Ziffern (4 Byte) N N Binär INTEGER
MONEY

18 oder 31 Ziffern (COBOL)
32 Ziffern (JAVA)

J J Gepacktes Dezimalformat DECIMAL
NUM 31 Ziffern J J Numerische Zeichen (gezont dezimal) NUMERIC
NUMC* 18 Ziffern J J Numerische Zeichen (gezont dezimal) NUMERIC
PACF* 18 Ziffern J J Gepacktes Dezimalformat DECIMAL
SMALLFLOAT 9 Ziffern (4 Byte) N J Gleitkommazahl mit einfacher Genauigkeit REAL
SMALLINT 4 Ziffern (2 Byte) N N Binär SMALLINT

*NUMC und PACF sind nur im VisualAge Generator-Kompatibilitätsmodus verfügbar.

Für numerische Datentypen gelten die folgenden Hinweise:
  1. Alle maximalen Längenangaben in Ziffern sind Näherungswerte. So kann beispielsweise der Maximalwert, der in zwei Byte mit einem Bit für ein Vorzeichen gespeichert werden kann, +32.767 oder -32.768 sein. Sie können problemlos jede vierstellige Zahl in zwei Byte speichern, sodass in der Tabelle die maximale Länge als 4 Ziffern angegeben wird.
  2. Die drei Größen für BIN (4, 9 und 18 Ziffern) entsprechen SMALLINT, INT bzw. BIGINT und sind die einzigen zulässigen Größen für BIN-Variablen. Der Unterschied zwischen einer als BIN(4,2) deklarierten Variablen und einer als INT deklarierten Variablen besteht darin, dass die BIN-Variable zwei Dezimalstellen besitzt. Eine INT-Variable hat keine Dezimalstellen.
  3. Sie können eine 32-stellige Zahl in einer DECIMAL- oder MONEY-Variablen in Java™ speichern. In COBOL beträgt die maximale Länge entweder 18 oder 31 Ziffern. Dies hängt vom Wert der Erstellungsdeskriptoroption 'maxNumericDigits' ab. Auch für DB2 liegt die maximale Länge bei 31 Ziffern.
  4. In mit EGL generierten Java-Programmen liegt der Wert einer FLOAT-Variablen im Bereich von 4.9e-324 bis 1.7976931348623157e308. Ein mit EGL generierten COBOL-Programmen unter z/OS liegt der Wert im Bereich von 5.4e-79 bis 7.2e+75. In mit EGL generierten COBOL-Programmen unter iSeries liegt der Wert im Bereich von 2.225074e-308 bis 1.797693e+308.
  5. In mit EGL generierten Java-Programmen liegt der Wert einer SMALLFLOAT-Variablen im Bereich von 3.40282347e+38 bis 1.40239846e-45. In mit EGL generierten COBOL-Programmen unter z/OS liegt der Wert im Bereich von 5.4e-79 bis 7.2e+75. In mit EGL generierten COBOL-Programmen unter iSeries liegt der Wert im Bereich von 1.175494e-38 bis 3.402823e+38. Bitte beachten Sie, dass der Wertebereich unter z/OS für FLOAT und SMALLFLOAT identisch ist. Der Unterschied zwischen den beiden Typen besteht in der Größe der Mantisse (auch als Festkommateil bezeichnet): 6 Hexadezimalziffern bei SMALLFLOAT (mindestens 7 Dezimalstellen) und 14 Hexadezimalziffern bei FLOAT (mindestens 17 Dezimalstellen).
  6. MONEY ist mit DECIMAL identisch. Ausnahme: Wenn Sie eine Variable auf der Basis von MONEY ausgeben, verwendet EGL die Systemvariable 'strLib.defaultMoneyFormat', um das Ausgabeformat festzulegen. Standardmäßig hat dieses Format zwei Dezimalstellen und umfasst ein Währungssymbol.
  7. EGL unterstützt die Typen NUMC und PACF, sodass Sie mit Dateien und Datenbanken aus älteren Anwendungen arbeiten können. Bei neueren Entwicklungen sollten Sie jedoch Variablen und Felder auf der Basis von BIN oder einem äquivalenten ganzzahligen Typ (BIGINT, INT oder SMALLINT) oder auf der Basis von DECIMAL verwenden, da Berechnungen mit diesen Variablentypen effizienter sind. Die größte Effizienz lässt sich mit vierstelligen BIN-Variablen ohne Dezimalstellen erzielen. Dieser Typ ist äquivalent zum Typ SMALLINT.
  8. Weitere Hinweise zur Effizienz:
    • Bei Berechnungen, Zuordnungen und Vergleichen sind Felder vom Typ NUM ohne Dezimalstellen effizienter als entsprechende Felder mit Dezimalstellen.
    • Bei mit Java generiertem Code sind Berechnungen mit Feldern vom Typ DECIMAL, NUM, NUMC und PACF gleich effizient. Bei mit COBOL generiertem Code gelten jedoch folgende Unterschiede:
      • Berechnungen mit Feldern vom Typ NUM sind effizienter als Berechnungen mit Feldern vom Typ NUMC.
      • Berechnungen mit Feldern vom Typ DECIMAL sind effizienter als Berechnungen mit Feldern vom Typ PACF.
  9. Wenn die Mainframe-Datenverarbeitung für Sie neu ist, sind Ihnen zwei häufig verwendete numerische Variablen in COBOL möglicherweise noch nicht bekannt: gezont dezimal und gepackt dezimal. Wenn Sie mit diesen Typen arbeiten, müssen Ihre EGL-Datentypen mit der Format- und Vorzeichenkonfiguration der Daten übereinstimmen, die in diesen Variablentypen enthalten sind. Hier finden Sie eine Kurzübersicht:
    • EBCDIC stellt die gewöhnlichen positiven Zahlen 0-9 mit den Hexadezimalzeichen F0-F9 dar. Beispiel: 150 wird in F1F5F0 umgesetzt. COBOL unterstützt auch 'gezonte' Datentypen, bei denen Vorzeichen zulässig sind (in EGL entspricht dies den Typen NUM und NUMC). Die Hex-Ziffer ganz rechts enthält das Vorzeichen für die gesamte Zahl, wobei F durch D ersetzt wird, um eine negative Zahl anzugeben. Daher entspricht F1F5D0 der negativen Zahl -150. Im Fall von NUMC wird F durch C ersetzt, um eine positive Zahl anzugeben, sodass die positive Zahl 150 als F1F5C0 wiedergegeben wird.
    • Wenn Sie mit EBCDIC nicht vertraut sind, mag Ihnen die Wiederholung des Zeichens F redundant erscheinen. Gepackt dezimale Datentypen (in EGL durch DECIMAL, MONEY und PACF dargestellt) weisen diese Redundanz nicht auf. Die gepackt dezimale Version von -150 ist 150D. Die positive Zahl 150 ist ebenfalls 150, außer im PACF-Format, wo diese Zahl als 150F wiedergegeben würde.

Hinweise zur Kompatibilität

Tabelle 2. Hinweise zur Kompatibilität
Plattform Problem
JavaScript-Generierung Die folgenden Typen werden unterstützt: ANY, BIGINT, BIN (jedoch nur ohne Dezimalstellen), Boolean, DataItem, DATE, DECIMAL, Delegate (Stellvertreter), Dictionary (Wörterverzeichnis), FLOAT, INT, NUM, NUMBER, SMALLFLOAT, SMALLINT, STRING (jedoch nur ohne Größenbeschränkung) , TIME, TIMESTAMP, NUM, MONEY, Serviceabschnitte, Schnittstellenabschnitte, externe Typen (Stereotyp JavaScript), Feldgruppen unterstützter Typen sowie nicht strukturierte Basis-, Ausnahme- und SQL-Datensatzabschnitte.

Die folgenden Typen werden nicht unterstützt: ArrayDictionary, BIN (mit Dezimalstellen), BLOB, CHAR, CLOB, DBCHAR, HEX, INTERVAL, MBCHAR, NUMC, STRING (mit Größenbegrenzung), PACF, UNICODE und strukturierte Datensatzabschnitte.


Feedback