카테고리 없음

[Oracle] 소수점 적용 방법 (round, to_char, FM)

밥코딩 2022. 9. 8. 13:40

안녕하세요, 코딩으로 밥벌이 중인 밥코딩입니다.

업무중에 필요한 기초 코딩상식을 기록하고 있습니다.


 

oracle 쿼리 스크립트 작성 시,

소수점 표현을 위해 간편한 2가지 방법을 사용하고 있습니다.

일반적인 소수점과 확률(%) 퍼센트를 표현하는데 충분합니다.

  •  round 함수
  •  to_char (FM 문자형식 지정)

 

<예시 최종 결과>

     - 특정 숫자를 소수점 이하 2자릿수로 표현

     - 확률 계산하여 % 함께 표현

SELECT -- ROUND 함수
       ROUND(123.567)                          AS R0  --결과 : 124
     , ROUND(123.456      , 2)                 AS R1  --결과 : 123.46
     , ROUND((5/2188)*100 , 2)                 AS R2  --결과 : 0.23
     , ROUND(  0.228519   , 2)                 AS R3  --결과 : 0.23
     , ROUND(  0.228519   , 2) || '%'          AS R4  --결과 : .23%
     , ROUND( 66.228519   , 2) || '%'          AS R5  --결과 : 66.23%

     -- TO_CHAR (FM 문자형식 지정)
     , TO_CHAR(12.345678  , 'FM999.99')        AS C0  --결과 : 12.35
     , TO_CHAR( 0.228519  , 'FM999.99')        AS C1  --결과 : .23
     , TO_CHAR( 0.228519  , 'FM990.00')        AS C2  --결과 : 0.23
     , TO_CHAR( 0.228519  , 'FM990.00') ||'%'  AS C3  --결과 : 0.23%
	 
     -- 'FM99999.999' : 정수 5개, 소숫점 3개 자리 중 존재하는 자릿수만 표현
     -- (0으로 시작하거나 0으로 끝나는 수는 제외)
     , TO_CHAR(  12345.123  , 'FM99999.999')   AS FM0 --결과 : 12345.123
     , TO_CHAR(1234567.12345, 'FM99999.999')   AS FM1 --결과 : ######...
     , TO_CHAR(     12.12   , 'FM99999.999')   AS FM2 --결과 : 12.12
     , TO_CHAR(    001.10   , 'FM99999.999')   AS FM3 --결과 : 1.1
	 
     -- 'FM00000.000' : 정수 5개, 소숫점 3개 자리를 고정해서 표현
     -- (없는 자릿수는 0으로 채워서 모두 표현, 0이라서 생략하는 경우 없음)
     , TO_CHAR(  12345.123  , 'FM00000.000')   AS FM4 --결과 : 12345.123
     , TO_CHAR(1234567.12345, 'FM00000.000')   AS FM5 --결과 : ######...
     , TO_CHAR(     12.12   , 'FM00000.000')   AS FM6 --결과 : 00012.120
     , TO_CHAR(    001.10   , 'FM00000.000')   AS FM7 --결과 : 00001.100
	 
  FROM DUAL
;

 

 

 

ROUND 함수 예제

     ROUND 반올림 함수 : ROUND(값, 자릿수)

     : 소수점 자릿수 지정시, 해당 소수점까지 반올림되어 나타납니다.

SELECT ROUND(123.567)                            AS P0  --결과 : 124
     , ROUND(123.456        , 2)                 AS P1  --결과 : 123.46
     , ROUND((5/2188)*100   , 2)                 AS P2  --결과 : 0.23
     , ROUND(  0.228519     , 2)                 AS P3  --결과 : 0.23

  FROM DUAL
;
  • ROUND(123.567) 의 경우 소수점을 지정하지 않았으므로,
    소수점 첫번째 자리에서 반올림하여 소수점은 표현하지 않습니다. → 결과 : 124
  • ROUND(123.456, 2)의 경우 소수점 둘째자리(2) 를 지정하였으므로,
    소수점 세번째 자리에서 반올림하여 소수점 둘째자리까지 표현합니다. → 결과 : 123.46

 

확률표현을 위해,

SELECT ROUND(  0.228519     , 2) || '%'          AS P4  --결과 : .23%
     , ROUND( 66.228519     , 2) || '%'          AS P5  --결과 : 66.23%

  FROM DUAL
;
  • ROUND((5/2188)*100, 2) 로 확률 계산식 값을 구합니다. 
    (5/2188)*100 = 0.228519 → 결과 : 0.23
  • 계산식 값을 반올림한 숫자 뒤에, 퍼센트(%) 문자를 이어 붙여 줍니다. → 결과 : .23 %   
    * 문자를 이어붙이자 앞 숫자 '0' 이 사라집니다.  이때 TO_CHAR 로 고정 포맷을 만들 수 있습니다.
  • ROUND( 66.228519 , 2) || '%' 의 경우,
    0이 아닌 숫자에 대해서는 퍼센트(%) 문자를 이어붙여도 정상적으로 표현 됩니다. → 결과 : 66.23 %

 

TO_CHAR (FM 문자 형식 지정)

    * TO_CHAR 는 이미 문자표현 방식이므로, 추가로 문자를 이어 붙여도 그대로 포맷이 유지됩니다.

 

  •  9와 0으로 자릿수 포맷 지정.
         - 9 : 가변 자릿수 (자릿수 값 없으면 표현 생략, 의미없는 숫자 -맨앞/맨뒤의 0- 은 표현 생략)
         - 0 : 고정 자릿수 (자릿수 값 없으면 0으로 채우는 것 의미)
  • 확률을 표현하기 위해,
        -   정수   : 3자리 고정 (확률의 경우, 최대치 100% 이므로) 
        - 소수점 : 예를 들어 2자리로 고정
SELECT -- TO_CHAR (FM 문자형식 지정)
       TO_CHAR(12.345678  , 'FM999.99')        AS C0  --결과 : 12.35
     , TO_CHAR( 0.228519  , 'FM999.99')        AS C1  --결과 : .23
     , TO_CHAR( 0.228519  , 'FM990.00')        AS C2  --결과 : 0.23
     , TO_CHAR( 0.228519  , 'FM990.00') ||'%'  AS C3  --결과 : 0.23%

  FROM DUAL
;

 

 

 

'FM999' 와 'FM000' 의 상세 차이를 확인 해 보겠습니다.

 

'FM999'

SELECT -- 'FM99999.999' : 정수 5개, 소숫점 3개 자리 중 존재하는 자릿수만 표현
       -- (0으로 시작하거나 0으로 끝나는 수는 제외)
       TO_CHAR(  12345.123  , 'FM99999.999')   AS FM0 --결과 : 12345.123
     , TO_CHAR(1234567.12345, 'FM99999.999')   AS FM1 --결과 : ######...
     , TO_CHAR(     12.12   , 'FM99999.999')   AS FM2 --결과 : 12.12
     , TO_CHAR(    001.10   , 'FM99999.999')   AS FM3 --결과 : 1.1

  FROM DUAL
;
  •  결과 : ######...  (지정된 정수5자리, 소수점3자리중 하나라도 자릿수 넘어가면 에러)
  •  결과 : 12.12         (9로 채워진 자릿수에 숫자가 없으면 표현 생략)
  •  결과 : 1.1              (9로 채워진 자릿수에 0으로 시작하거나 0으로 끝나는 수는 표현 생략)

 


 

 'FM000' 

SELECT -- 'FM00000.000' : 정수 5개, 소숫점 3개 자리를 고정해서 표현
       -- (없는 자릿수는 0으로 채워서 모두 표현, 0이라서 생략하는 경우 없음)
       TO_CHAR(  12345.123  , 'FM00000.000')   AS FM4 --결과 : 12345.123
     , TO_CHAR(1234567.12345, 'FM00000.000')   AS FM5 --결과 : ######...
     , TO_CHAR(     12.12   , 'FM00000.000')   AS FM6 --결과 : 00012.120
     , TO_CHAR(    001.10   , 'FM00000.000')   AS FM7 --결과 : 00001.100
	 
  FROM DUAL
;
  •  결과 : ######...      (지정된 정수5자리, 소수점3자리중 하나라도 자릿수 넘어가면 에러)
  •  결과 : 00012.120    (없는 자릿수는 0으로 채워서 모두 표현)
  •  결과 : 00001.100    (없는 자릿수는 0으로 채워서 모두 표현)

읽어주셔서 감사합니다.

질문주시면 같이 공부하면서 답변 드리겠습니다.