convertNumberToUnicodeNum()

Diese Funktion bietet EGL-Unterstützung für COBOL-Variablen im Format NATIONAL SIGN IS LEADING, SEPARATE. Hierbei handelt es sich um Variablen, die UNICODE-Zeichen (NATIONAL) mit einem Vorzeichen enthalten. Beispiel:
15  UNICODENUMBER PIC S9(11)V9(04) USAGE NATIONAL SIGN IS LEADING, SEPARATE.

Die Systemfunktion 'sysLib.convertNumberToUnicodeNum()' konvertiert die Ziffern eines numerischen Quellenwerts in UNICODE-Zeichen, denen ein UNICODE-Vorzeichen vorangestellt wird. Führende Nullen werden für den ganzzahligen Teil eingeschlossen, nachfolgende Nullen werden für den Bruchteil eingeschlossen, Dezimalzeichen werden überhaupt nicht eingeschlossen.

Syntax

  sysLib.convertNumberToUnicodeNum(
    Quelle SMALLINT | INT | BIGINT | DECIMAL in,
    Ziel UNICODE out] )
Quelle
Eine beliebige numerische Variable mit Ausnahme von Gleitkommavariablen.
Ziel
Eine UNICODE-Variable.

Erforderliche Längen für UNICODE-Zahlenkonvertierungen

Die erforderliche Länge der UNICODE-Variablen hängt von der Datentypspezifikation des numerischen Felds ab und davon, ob die Konvertierung mit Vorzeichen oder ohne Vorzeichen erfolgt. Anhand einer Gültigkeitsprüfung wird sichergestellt, dass jeweils die erforderliche Länge verwendet wird. Beachten Sie, dass beim Typ NUM und DECIMAL sowohl ungerade als auch gerade Längen auf die nächsthöhere gerade Länge hochgestuft werden, wenn eine Konvertierung mit Vorzeichen stattfindet. Daher ist für die Konvertierung einer Variablen vom Typ NUM(10) oder NUM(11) in eine UNICODE-Variable mit Vorzeichen eine Variable vom Typ UNICODE(12) erforderlich.

Tabelle 1. Erforderliche Längen von UNICODE-Variablen für numerische Typen
Numerischer Datentyp Numerische Länge für UNICODE (Konvertierung mit Vorzeichen) Numerische Länge für UNICODE (Konvertierung ohne Vorzeichen)
SMALLINT, BIN(4,x) 6 5
INT, BIN(9,x) 11 10
BIGINT, BIN(18,x) 20 19
NUM(x, y) oder DECIMAL(x, y), wobei 'x' eine ungerade Zahl zwischen 1 und 31 ist x+1 x
NUM(x, y) oder DECIMAL(x, y), wobei 'x' eine gerade Zahl zwischen 0 und 30 ist x+2 x+1
NUM(32,y), DECIMAL(32,y) 33 32

Beispiele

  n SMALLINT = 1234;
  u UNICODE(4);
  // Funktion empfängt Gültigkeitsfehler 
  // 'u' muss eine Länge von 6 haben
  convertNumberToUnicodeNum(n, u);
  
  n SMALLINT = 1234;
  u UNICODE(6);
  // Funktion setzt 'u' auf "+001234"
  convertNumberToUnicodeNum(n, u);

  n INT = 123456789;
  u UNICODE(11);
  // Funktion setzt 'u' auf
  // "+0123456789"
  convertNumberToUnicodeNum(n, u);

  n BIGINT = -1234567890;
  u UNICODE(20);
  // Funktion setzt 'u' auf
  // "-0000000001234567890"
  convertNumberToUnicodeNum(n, u);

  n BIN(18, 9) = -123456.1234;
  u UNICODE(20);
  // Funktion setzt 'u' auf
  // "-0000123456123400000"
  convertNumberToUnicodeNum(n, u);

  n DECIMAL(31, 4) = 123456789012345678901234567.8901;
  u UNICODE(32);
  // Funktion setzt 'u' auf
  // "+1234567890123456789012345678901"
  convertNumberToUnicodeNum(n, u);

  // Nächste Zeile empfängt Gültigkeitsfehler für COBOL
  // Variablen vom Typ NUM sind bei COBOL auf eine Länge von 31 beschränkt
  n NUM(32, 4) = 1234567890123456789012345678.9012;
  u UNICODE(33);
  // Bei Java setzt die Funktion 'u' auf
  // "+012345678901234567890123456789012"
  convertNumberToUnicodeNum(n, u);

Hinweise zur Kompatibilität

Tabelle 2. Hinweise zur Kompatibilität
Plattform Problem
JavaScript-Generierung Die Funktion 'sysLib.convertNumberToUnicodeNum()' wird nicht unterstützt.

Feedback