数値型

EGL では、様々な種類の数値データ型が用意されています。ある種の数値型 (BIGINT または FLOAT など) は、長さと小数位置を自動的に指定します。その他の数値型 (BIN または DECIMAL など) については、以下の例で示すように、長さと (該当する場合) 小数桁を指定する必要があります。

truckMileage BIN(9,2);             // 9 桁、小数点以下の桁数 2
DataItem zipCode INT
  { validValues = [00000,99999]};  // 5 桁のみ
myZipCode zipcode;	

EGL は truckMileage および myZipCode に対してストレージを割り振りますが、 単なるモデルである zipCode データ項目にはストレージを割り振りません。

表 1. EGL プリミティブ数値型
プリミティブ サイズ 長さ指定 小数部 データ型 DB2® と同等のもの
BIGINT 18 桁 (8 バイト) N N 2 進数 BIGINT
BIN 4、9、または 18 桁 (2、4、または 8 バイト) Y Y 2 進数 該当なし
DECIMAL

18 桁または 31 桁 COBOL
32 桁 JAVA

Y Y パック 10 進文字 DECIMAL
FLOAT 18 桁 (8 バイト) N Y 倍精度浮動小数点 FLOAT
INT 9 桁 (4 バイト) N N 2 進数 INTEGER
MONEY

18 桁または 31 桁 COBOL
32 桁 JAVA

Y Y パック 10 進文字 DECIMAL
NUM 31 桁 Y Y 数字 (ゾーン 10 進数) NUMERIC
NUMC* 18 桁 Y Y 数字 (ゾーン 10 進数) NUMERIC
PACF* 18 桁 Y Y パック 10 進文字 DECIMAL
SMALLFLOAT 9 桁 (4 バイト) N Y 単一精度浮動小数点 REAL
SMALLINT 4 桁 (2 バイト) N N 2 進数 SMALLINT

* NUMC および PACF は、VisualAge®Generator 互換モードでのみ使用可能です。

以下の考慮事項は、数値型に適用されます。
  1. 桁数で指定されるすべての最大長は概算です。 例えば、1 ビットを符号用に確保した上で 2 バイトに格納できる最大値は、+32,767 または -32,768 です。 2 バイトに 4 桁の数値を安全に格納できるため、表では最大長が 4 桁と示されます。
  2. BIN の 3 つのサイズ (4、9、および 18 桁) はそれぞれ SMALLINT、INT、 および BIGINT に対応しており、BIN 変数用に許可されている唯一のサイズです。 BIN(4,2) として宣言される変数と INT として宣言される変数の違いは、 BIN 変数の場合は小数点以下 2 桁を持つ点です。 INT 変数には小数点以下の桁はありません。
  3. Java™ では、DECIMAL 型または MONEY 型の変数に 32 桁の数値を格納できます。COBOL では、最大長は、maxNumericDigits ビルド記述子オプションの値に応じて、18 桁または 31 桁のいずれかです。また、DB/2 では 31 桁が最大長です。
  4. EGL により生成された Java プログラムの場合、 FLOAT 変数の値の範囲は 4.9e-324 から 1.7976931348623157e308 です。 z/OS® で EGL により生成された COBOL プログラムの場合、 値の範囲は 5.4e-79 から 7.2e+75 です。 iSeries® で EGL により生成された COBOL プログラムの場合、 値の範囲は 2.225074e-308 から 1.797693e+308 です。
  5. EGL により生成された Java プログラムの場合、 SMALLFLOAT の値の範囲は 3.40282347e+38 から 1.40239846e-45 です。 EGL により z/OS で生成された COBOL プログラムの場合、 値の範囲は 5.4e-79 から 7.2e+75 です。 iSeries で EGL により生成された COBOL プログラムの場合、 値の範囲は 1.175494e-38 から 3.402823e+38 です。 z/OS での値の範囲は、 FLOAT と SMALLFLOAT の両方に関して同じであることに注意してください。 2 つの型の相違点は、小数部 (仮数とも呼ばれる) のサイズにあります。 SMALLFLOAT の場合は 6 個の 16 進数字 (少なくとも 7 個の 10 進数字) で、 FLOAT の場合は 14 個の 16 進数字 (少なくとも 17 個の 10 進数字) です。
  6. MONEY は、MONEY に基づく変数を出力するときに、EGL が strLib.defaultMoneyFormat システム変数を 使用して出力フォーマットを決定する点を除いて、DECIMAL と同じです。 デフォルトでは、このフォーマットには小数点以下の桁が 2 桁あり、 通貨記号が含まれます。
  7. EGL では NUMC および PACF 型をサポートしているので、 旧アプリケーションのファイルやデータベースを処理することができます。 新規開発では、BIN もしくはそれに同等の整数型 (BIGINT、INT、または SMALLINT)、 あるいは DECIMAL 型に基づく変数やフィールドを使用します。 これらの変数型を使用すると、計算がより効率的になります。 小数点以下の桁を持たない 4 桁の BIN 変数 (SMALLINT 型と同等) を使用すると、最も良い効率を得られます。
  8. その他の効率に関する考慮事項には、以下の点があります。
    • 計算、代入、および比較においては、小数部のない NUM 型のフィールドの方が、小数部を持つ NUM 型のフィールドよりも効率的です。
    • Java で生成されたコードの場合、DECIMAL、NUM、NUMC、および PACF フィールドの各計算効率は同じです。しかし、COBOL で生成されたコードの場合は、以下の違いがあります。
      • NUM フィールドの計算の方が NUMC フィールドの計算よりも効率的である。
      • DECIMAL フィールドの計算の方が、PACF フィールドの計算よりも効率的である。
  9. メインフレーム・コンピューターを初めて使用する場合、COBOL における 2 つの一般的な数値変数型 (ゾーン 10 進数およびパック 10 進数) に見覚えがないかもしれません。 これらの型を処理する場合、EGL データ型は、これらの型に含まれる データのフォーマットおよび符号の構成に一致する必要があります。次に簡単な概要を示します。
    • EBCDIC は通常の正数 0 から 9 を 16 進文字 F0 から F9 で表します (例えば、150 は F1F5F0 に変換します)。 COBOL でも、符号を許可する「ゾーン」データ型 (EGL では、NUM および NUMC) をサポートします。 右端の 16 進数字は整数の符号であり、負の数値の場合には F が D に置き換えられます。 したがって、F1F5D0 は -150 になります。 NUMC では、正数の場合は F が C に置き換わり、正の 150 は F1F5C0 と表示されます。
    • 繰り返される F の文字は、EBCDIC に慣れていないと冗長に見えるかもしれません。 パック 10 進データ型 (EGL では DECIMAL、MONEY、および PACF で表される) では、この冗長がなくなります。 -150 のパック 10 進バージョンは 150D です。正の 150 は 150 となります。ただし、PACF フォーマットでは 150F となります。

互換性に関する考慮事項

表 2. 互換性に関する考慮事項
プラットフォーム 問題
JavaScript 生成 サポートされるデータ型は、ANY、BIGINT、BIN (ただし、小数点以下の桁を含まない場合に限る)、Boolean、DataItem、DATE、DECIMAL、Delegate、Dictionary、FLOAT、INT、NUM、NUMBER、SMALLFLOAT、SMALLINT、STRING (ただし、サイズ制限を含まない場合に限る)、TIME、TIMESTAMP、NUM、MONEY、サービス・パーツ、インターフェース・パーツ、外部型 (ステレオタイプ JavaScript)、サポートされるデータ型による配列、 および非構造化の基本、例外、および SQL レコード・パーツです。

サポートされないデータ型は、ArrayDictionary、BIN (小数点以下の桁数を含むもの)、BLOB、CHAR、CLOB、DBCHAR、HEX、INTERVAL、MBCHAR、NUMC、STRING (サイズ制限を含むもの)、PACF、UNICODE、および構造化されたレコード・パーツです。


フィードバック