data pi(1) type p decimals 2 value '3.14' .
data pi(3) type p decimals 2 value '123.14' .
위의 두구문을 각각 실행하면.. 위의 구문에서는 오버플로우가 발생하는데...아래의 구문에서는 오버플로우가
발생하지 않는데요...이유를 잘모르겠습니다.
P type의 데이터를 선언할경우 길이를 정할때 소수점이하를 제외한 부분만 지정하는걸루 알고있었는데..
여하튼 왜이런 현상이 나타나는지 답변부탁드립니다.
헬프에 좋은 내용이 나와 있네요..
The valid length for packed numbers is between 1 and 16 bytes; two decimal places are packed into one byte, whereby the last byte only contains one place and the plus/minus sign; after the decimal separator, up to 14 decimal places are permitted. Depending on the field length len and the number of decimal places dec, the following applies for the value area: (-10^(2len -1) +1) / (10^(+dec)) to (+10^(2len -1) -1) /(10^(+dec)) in steps of 10^(-dec). Values in between this range are rounded off.
==> 플러스/마이너스 기호가 한자리 차지하기때문에 오버 플로가 나겠네요..
이소스 한번 실행해 보세요..
이게 P type의 최대 최소 범위를 나타내는 소스입니다.
result TYPE REF TO data.
FIELD-SYMBOLS
result = cl_abap_exceptional_values=>get_min_value( pack ).
IF result IS NOT INITIAL.
ASSIGN result->* TO
WRITE
ENDIF.
result = cl_abap_exceptional_values=>get_max_value( pack ).
IF result IS NOT INITIAL.
ASSIGN result->* TO
WRITE
ENDIF.
data: pack TYPE p LENGTH 2 ==> 요게 자리 수 이네요..이부분을 수정하시고 한번
해보시면 왜 안되는지 금방 알수 있게죠...
즐밥하세요.