convertUnicodeNumToNumber()

sysLib.convertUnicodeNumToNumber() 関数は、NATIONAL SIGN IS LEADING, SEPARATE フォーマットの COBOL 変数に対する EGL サポートを提供します。

これらのフォーマットの変数は、以下のような、先頭に符号文字を持つ UNICODE 文字 (NATIONAL) を含みます。
15  UNICODENUMBER PIC S9(11)V9(04) USAGE NATIONAL SIGN IS LEADING, SEPARATE.

sysLib.convertUnicodeNumToNumber() システム関数は、先頭に UNICODE 符号文字の付いた UNICODE 文字を含むソース変数の数字を、数値変数に変換します。ソースの整数部分には先行ゼロを、小数部分には後続ゼロを組み込むことができます。

構文

  sysLib.convertUnicodeNumToNumber(
    source UNICODE in,
    target SMALLINT | INT | BIGINT | DECIMAL out] )
source
数字および先行符号文字を含む UNICODE 変数。
target
任意の非浮動小数点数値変数。

エラー条件

UNICODE 変数の内容が正しいフォーマットになっていない場合、この関数は TypeConversionException をスローします。 以下のフォーマット・エラーは、いずれも例外の原因になります。
  • 最初の位置に符号文字がない。
  • 最初の位置以外に数字以外のものがある。
  • 長さがターゲットのサイズと一致しない (先行ゼロまたは後続ゼロが必要と考えられる)。 UNICODE の数値変換に必要な長さ を参照してください。

  n SMALLINT;
  u UNICODE(4) = "1234";
  // 関数で検証エラーが発生
  // u に長さ 6 が必要です
  convertUnicodeNumToNumber(u, n); 

  n BIGINT;
  u UNICODE(20) = "-0000000001234567890";
  // 関数が n を -1234567890 に設定します
  convertUnicodeNumToNumber(u, n);

  n DECIMAL(31,4);
  u UNICODE(32) = "+1234567890123456789012345678901";
  // 関数が n を 123456789012345678901234567.8901 に設定します
  convertUnicodeNumToNumber(u, n);

  // 次の行で COBOL の検証エラーが発生
  // NUM 変数は COBOL の場合 31 の長さに制限
  n NUM(32,4);
  u UNICODE(33) = "+012345678901234567890123456789012";
  // Java の場合、関数が n を
  // 1234567890123456789012345678.9012 に設定します
  convertUnicodeNumToNumber(u, n);

  n DECIMAL(8,4);
  u UNICODE(10) = "0123456789";
  // 関数が TypeConversionException をスローします
  // 「0」は無効な符号文字
  convertUnicodeNumToNumber(u, n);

互換性に関する考慮事項

表 1. 互換性に関する考慮事項
プラットフォーム 問題
JavaScript 生成 関数 sysLib.convertUnicodeNumToNumber() はサポートされていません。

フィードバック