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 ビットを符号用に確保した上で 2 バイトに格納できる最大値は、+32,767 または -32,768 です。
2 バイトに 4 桁の数値を安全に格納できるため、表では最大長が 4 桁と示されます。
- BIN の 3 つのサイズ (4、9、および 18 桁) はそれぞれ SMALLINT、INT、
および BIGINT に対応しており、BIN 変数用に許可されている唯一のサイズです。
BIN(4,2) として宣言される変数と INT として宣言される変数の違いは、
BIN 変数の場合は小数点以下 2 桁を持つ点です。
INT 変数には小数点以下の桁はありません。
- Java™ では、DECIMAL 型または MONEY 型の変数に 32 桁の数値を格納できます。COBOL では、最大長は、maxNumericDigits ビルド記述子オプションの値に応じて、18 桁または 31 桁のいずれかです。また、DB/2 では 31 桁が最大長です。
- 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 です。
- 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 進数字) です。
- MONEY は、MONEY に基づく変数を出力するときに、EGL が strLib.defaultMoneyFormat システム変数を
使用して出力フォーマットを決定する点を除いて、DECIMAL と同じです。
デフォルトでは、このフォーマットには小数点以下の桁が 2 桁あり、
通貨記号が含まれます。
- EGL では NUMC および PACF 型をサポートしているので、
旧アプリケーションのファイルやデータベースを処理することができます。
新規開発では、BIN もしくはそれに同等の整数型 (BIGINT、INT、または SMALLINT)、
あるいは DECIMAL 型に基づく変数やフィールドを使用します。
これらの変数型を使用すると、計算がより効率的になります。
小数点以下の桁を持たない 4 桁の BIN 変数 (SMALLINT 型と同等) を使用すると、最も良い効率を得られます。
- その他の効率に関する考慮事項には、以下の点があります。
- 計算、代入、および比較においては、小数部のない NUM 型のフィールドの方が、小数部を持つ NUM 型のフィールドよりも効率的です。
- Java で生成されたコードの場合、DECIMAL、NUM、NUMC、および PACF フィールドの各計算効率は同じです。しかし、COBOL で生成されたコードの場合は、以下の違いがあります。
- NUM フィールドの計算の方が NUMC フィールドの計算よりも効率的である。
- DECIMAL フィールドの計算の方が、PACF フィールドの計算よりも効率的である。
- メインフレーム・コンピューターを初めて使用する場合、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、および構造化されたレコード・パーツです。
|