ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Data Type] Predefined ABAP Type: Numeric type
    SAP/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
Designed by Tistory.