ABAP에서 소수 자릿수를 나타내기

Jiwowow·2024년 3월 25일

SAP ABAP 배우기

목록 보기
3/6

1. 소수를 나타낼 수 있는 데이터 타입

  • Type P : Packed Numbers. 소수 자리 허용. 1~16 byte 가능. 소수 부분 최대 14자리 설정 가능
    • 프로그램 속성 세팅시 Fixed point arithmetic 체크해야 표시됨. 안하면 type I로 변경됨
    • 정확한 계산이 필요할 때 사용

  • Type F : Floating Point Numbers.
    • 내부적으로 Binary System으로 전환될 때 반올림 에러 발생(원하는 값이 정확히 나오지 않을 수 있음)
    • 높은 정확도 요구한다면 Type P 사용. 매우 작거나 매우 큰 수라면 Type F 사용

--> 소수를 나타내야 할 때 주로 Type P를 사용함


2. 소수 자릿수를 나타내기 위한 환경 설정

  • SE38 - 상단 Goto - Attributes - Fixed point arithmetic 을 체크 해제!!!!!

  • 코드
*&---------------------------------------------------------------------*
*& Report Z02_02
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z02_02.
DATA gv_1 TYPE p DECIMALS 1 VALUE '1.1'.
DATA gv_2 TYPE p DECIMALS 1 VALUE '2.1'.
DATA gv_3 TYPE p.

gv_3 = gv_1 * gv_2.

WRITE gv_3.
  • 결과
231

3. Type P 연산

  • Type P 선언시 기본 8byte 할당. 1 byte = 2 decimal digits.
  • 기본 8 bytes 는 총 16 decimal places. 이 중 마지막 decimal place는 부호(sign). → 최대 15 자리수 사용 가능. 이때 최대 소수 자리수는 14자리(DECIMALS 14)
  • Type p는 기본 8 byte지만 선언시 최대 16 byte 까지 할당 가능. 이 중 마지막 decimal place는 부호(sign). → 최대 31 자리 수 사용 가능. 이때 최대 소수 자리는 30자리(DECIMALS 30)

DATA gv_1 TYPE p.
DATA gv_2 TYPE p DECIMALS 14.

gv_1 = '123456789012345'.
* --> 총 15자리이므로 에러 나지 않음.

gv_2 = '0.12345678901234'.
* --> 소수 최대 자리수 14자리이므로 에러 나지 않음.

gv_1 = '1234567890123456'.
* --> 총 16 자리이므로 에러 발생!!

*-------------------------------
DATA gv_3(16) TYPE p.

gv_3 = '1234567890123456789012345678901'
* --> 총 31 자리이므로 에러 나지 않음.

  • 기본 8 byte type p에 16자리 수 할당시 에러 : ‘Overflow when converting ‘1234567890123456’’

profile
병아리 ABAP 개발 일지

0개의 댓글