-
[Data Type] Predefined ABAP Type: Numeric typeSAP/Abap 2022. 1. 10. 19:38
[Predefined abap type]
ABAP kernel 레벨에서 정의되어있는 데이터 타입으로 모든 프로그램에서 사용 가능하며, 프로그램에 필요한 local type을 정의할 때 사용이 가능하다
TYPE Type 초기 길이 가능 길이 초깃값 의미 Numeric I 4 4 0 Integer F 8 8 0 Floating point number P 8 1 - 16 0 Packed number Character C 1 1 - 65535 null Character(Text) D 8 8 '00000000' Date(YYYYMMDD) N 1 1 - 65535 '0 ~ 0' Numeric text T 6 6 '000000' Time(HHMMSS) Hexadecimal X 1 1 - 65535 X'0 ~ 0' Hexadecimal [Numeric Data Type]
1) Integer (Type i)
- 정수 타입으로 소수점이 존재하면 반올림한다
2) Packed number(Type p)
- 소수자리를 허용하는 타입으로 프로젝트 속성값 중 'Fixed point arithmetic'을 체크해야 한다.
- 소수점 표현시 반드시 변수 선언부에서 DECIMALS 옵션을 추가해야 한다.
- 가변적인 size를 가지며 default size는 8byte로 16자리(2*8byte)수 까지 표현 가능하다.
- 정확한 계산이 요구되는 경우 사용되는 타입으로 연산시 SW의 개입이 필요해 연산속도가 Type i, f보다 상대적으로 느리다
*&---------------------------------------------------------------------* *& Report ZA02_03 *&---------------------------------------------------------------------* *& Numeric data type p 에제 *&---------------------------------------------------------------------* REPORT ZA02_03. DATA : gv_1 TYPE p, gv_2 TYPE p, gv_3 TYPE p DECIMALS 14, gv_4 TYPE p DECIMALS 14, gv_5 TYPE p, gv_6(16) TYPE p. gv_1 = '123456789012345'. " 정상: 8byte이므로 16자리 수 까지 표현 가능 * gv_2 = '12345678901234567890'. " 비정상: 8byte 이상의 값 할당 gv_3 = '0.12345678901234'. " 정상: 소수점 14자리 이하값까지 정상 출력 gv_4 = '0.1234567890123456'. " 정상: 소수점 14자리 이상값은 반올림하여 출력 gv_5 = '0.1234567890123456'. " 비정상: DECIMALS 옵션을 생략해 정수형으로 인식 gv_6 = '1234567890123456789012345678901'. " 정상: 16byte이므로 32자리 수 까지 표현 가능 WRITE :/ gv_1, / gv_2, / gv_3, / gv_4, / gv_5, / gv_6.
- 결과 화면
- gv_2 출력시 발생하는 에러: Overflow dump error.
3) Floating point number(Type f)
- 지수 형태로 표현되는 실수 타입으로 출력시 FLTP_CHAR_CONVERSION과 같은 Function module을 통해 변환을 해야 한다.
- 프로그램 내부적으로 binary값 변환 시 값이 부정확해지는 반올림 에러가 발생할 수 있다.(Rough calculation)
- 부동소수점: 소수점의 위치를 가변적으로 설정함으로써 한정된 비트로 넓은 범위의 수를 표현할 수 있음
- 지수 형태 즉, 부동소수점으로 표현하므로 정밀도가 낮아져 값의 유실이 발생할 수 있다.
- 즉, 높은 정확도를 요구하는 연산은 type p를 사용해야하고, 넓은 범위(매우 작거나, 큰 수)를 표현할때는 type f를 사용해야 한다.
4) Numeric operation: Basic arithmetic operation(기본 연산자)
연산자 의미 형식 동일 연산 + 덧셈 <p> = <n> + <m> ADD <n> TO <m> - 뺄셈 <p> = <n> - <m> SUBTRACT <m> FROM <n> * 곱셈 <p> = <n> * <m> MULTIPLY <n> BY <n> / 나눗셈 <p> = <n> / <m> DIVIDE <n> BY <m> DIV 정수 나눗셈 <p> = <n> DIV <m> MOD 정수 나머지 연산 <p> = <n> MOD <m> ** 제곱 <p> = <n> ** <m> *&---------------------------------------------------------------------* *& Report ZA02_04 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZA02_04. DATA : gv_int1 TYPE i VALUE 2, gv_int2 TYPE i VALUE 3, gv_iresult TYPE i. gv_iresult = gv_int1 + gv_int2. " gv_int1(2) + gv_int2(3) => 5 WRITE :/ '1: ', gv_iresult. ADD 1 TO gv_iresult. " 1 + gv_iresult(5) => 6 WRITE :/ '2: ', gv_iresult. DATA : gv_pack1 TYPE p DECIMALS 2 VALUE '2.17', gv_pack2 TYPE p DECIMALS 2 VALUE '5.43', gv_presult TYPE p DECIMALS 2. gv_presult = gv_pack2 / gv_pack1. " => 2.50230415 => 소수점 2자리 까지 반올림 WRITE :/ '3: ', gv_presult. MULTIPLY gv_presult BY gv_pack1. " => 5.425 => 소수점 2자리 까지 반올림 WRITE :/ '4: ', gv_presult. DATA : gv_float1 TYPE f VALUE '1.337', gv_float2 TYPE f VALUE '2.7', gv_fresult TYPE f, gv_cresult TYPE c LENGTH 16. gv_fresult = gv_float2 * gv_float1. WRITE :/ '5: ', gv_fresult. * type f 사용시 FLTP_CHAR_CONVERSION 함수 호출을 통해 * 문자형으로 변환한 후 출력해야 한다. * => INPUT 값을 소수점 DECIM 자리 까지 반올림 한 후 FLSTR변수에 할당 CALL FUNCTION 'FLTP_CHAR_CONVERSION' EXPORTING DECIM = 2 INPUT = gv_fresult IMPORTING FLSTR = gv_cresult. WRITE :/ '6: ', gv_cresult.
5) Numeric operation: Numeric arithmetic function(기본 함수)
Type Function Meaning Numeric ABS 절대값 반환 SIGN 부호값 반환 [ +(1), 0(0), -(-1) ] CEIL 해당 값보다 작지 않은 정수값 중 가장 큰 정수 반환 FLOOR 해당 값보다 크지 않은 정수값 중 가장 큰 정수 반환 TRUNC 소수점 제외 후 정수 값 반환 FRAC 소수점 값만 반환 Floating-point ACOS, ASIN, ATAN, COS, SIN, TAN 삼각 함수 COSH, SINH, TANH 쌍곡선 함수 EXP 지수 함수 LOG 지연로그 함수 LOG10 상용로그 함수 SQRT 제곱근 함수 'SAP > Abap' 카테고리의 다른 글
[Data Type] Program's local type (0) 2022.01.11 [Data Type] Predefined ABAP Type: Other types (0) 2022.01.10 [Data Type] Abap naming rule (0) 2022.01.10 [Data Type] Data variable & Data type 기본 (0) 2022.01.10 [Abap] Package & CTS (0) 2022.01.04