숫자 유형
EGL은 다양한 숫자 데이터 유형을 제공합니다. 일부 숫자 유형(예: BIGINT 또는 FLOAT)은 자동으로 길이와 소수 자리르 표시합니다. 기타 숫자 유형(예: BIN 또는 DECIMAL)의 경우 다음 예제와 같이 길이와 소수 자릿수(해당하는 경우)를 지정해야 합니다.
truckMileage BIN(9,2); // 9 digits, two decimal places
DataItem zipCode INT
{ validValues = [00000,99999]}; // 5 digits only
myZipCode zipcode;
EGL은 truckMileage와 myZipCode에 스토리지를 할당하지만 모델일 뿐인 zipCode 데이터 항목에는 할당하지 않습니다.
| 기본요소 | 크기 | 길이 지정 | 소수 | 데이터 유형 | DB2® 동등항목 |
|---|---|---|---|---|---|
| BIGINT | 18자리(8바이트) | N | N | 2진 | BIGINT |
| BIN | 4, 9 또는 18자리(2, 4 또는 8바이트) | Y | Y | 2진 | n/a |
| DECIMAL | 18 또는 31자리 COBOL |
Y | Y | 팩형 10진수 문자 | DECIMAL |
| FLOAT | 18자리(8바이트) | N | Y | 배정밀도 부동 소수점 | FLOAT |
| INT | 9자리(4바이트) | N | N | 2진 | INTEGER |
| MONEY | 18 또는 31자리 COBOL |
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입니다. 4자리 숫자를 2바이트에 안전하게 저장할 수 있으므로 표에 최대 길이가 4자리로 표시되어 있습니다.
- BIN의 세 가지 크기(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입니다. z/OS의 EGL 생성 COBOL 프로그램에서는 값의 범위가 5.4e-79 - 7.2e+75입니다. iSeries의 EGL 생성 COBOL 프로그램에서 값의 범위는 1.175494e-38 - 3.402823e+38입니다. z/OS에서 값의 범위는 FLOAT와 SMALLFLOAT의 경우 동일합니다. 두 유형 간 차이점은 가수(유효숫자(significand)라고도 함)의 크기에 있습니다. SMALLFLOAT의 경우 6자리 16진수(최소 7자리 10진수)이고 FLOAT의 경우 14자리 16진수(최소 17자리 10진수)입니다.
- MONEY는 DECIMAL과 동일하고 MONEY를 기반으로 변수를 출력하는 경우 EGL에서 strLib.defaultMoneyFormat 시스템 변수를 사용하여 출력 형식을 판별하는 점만 다릅니다. 기본적으로 이 형식에는 2자리 소수가 있으며 통화 기호를 포함합니다.
- EGL은 이전 애플리케이션의 파일과 데이터베이스 관련 작업을 수행할 수 있도록 NUMC 유형과 PACF 유형을 지원합니다. 새 개발에서는 BIN이나 이와 동등한 정수 유형(BIGINT, INT 또는 SMALLINT) 또는 DECIMAL 유형을 기반으로 하는 변수와 필드를 사용하십시오. 이러한 변수 유형을 사용하는 경우 계산이 더 효율적입니다. 소수 자리가 없는 4자리 BIN 변수(SMALLINT 유형과 동등)를 사용하면 효율성이 가장 좋습니다.
- 기타 효율성 고려사항은 다음과 같습니다.
- 계산, 지정, 비교에서 소수 자리가 없는 NUM 필드가 소수 자리가 있는 필드보다 보다 효율적입니다.
- Java에서 생성된 코드의 경우
DECIMAL, NUM, NUMC, PACF 필드가 있는 계산은 똑같이
효율적입니다. 그러나 COBOL에서 생성된 코드의 경우 다음과 같은 차이점이
적용됩니다.
- NUM 필드가 있는 계산이 NUMC 필드가 있는 계산보다 효율적입니다.
- DECIMAL 필드가 있는 계산이 PACF 필드가 있는 계산보다 효율적입니다.
- 메인프레임 계산이 처음인 경우 COBOL에서 일반적인
두 가지 유형의 숫자 변수 존형 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은 PACF 형식인 경우(이 경우 150F) 외에는 150입니다.
호환성 고려사항
| 플랫폼 | 문제 |
|---|---|
| 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, 구조화 레코드 파트. |