소수를 정수로 처리하는 경우 반올림을 주로 하지만, 가끔은 절사나 올림 내림 처리도 하지요.
3.14 를 3으로 변환하는 방법은 무엇까요?
두가지 방법이 가능하겠습니다.
floor(3.14) 또는 trunc(3.14) 입니다.
저는 내림은 floor 로 하고 절사는 trunc 처리를 하면서도, 막연하게는 두 개들 동일시 해왔던 것 갔습니다.
얼마전 문득 결과가 항상 동일하다면 두개가 있을 이유가 없을 터이고, 두개의 차이가 무엇일까 궁금해졌습니다.
그래서 Oracle SQL Language Reference 를 좀더 꼼꼼히 확인해 보았습니다.
The TRUNC (number) function returns n1 truncated to n2 decimal places. If n2 is omitted, then n1 is truncated to 0 places.
잘라버린다 즉 소수점 아래 숫자를 없앤다는 의미죠. 특별할 것 없는 당연한 표현입니다.
FLOOR returns the largest integer equal to or less than n.
올림과 내림의 내림에 해당하며, 영어로는 천장과 바닥으로 표현하는데 그 정리가 재미 있네요.
n 이 3.14 라면 3.14 보다 같거나 작은 가장 큰 정수라고 표현했고 답은 3이죠.
바닥층의 의미를 수학적으로 표현한 것으로 들리네요.
이 쯤 되어서야 음수(지하층)일때 둘의 결과는 달라지겠다는 생각을 할 수 있었고 비교해보았습니다.
select kk, floor(kk) as f,trunc(kk) as t
from (
select 3.14 as kk from dual union all
select -3.14 as kk from dual -- 지하 3.14 층은 지하 3층과 지하 4층 사이이고 바닥은 지하 4층 천장은 지하 3층이겠죠.
)
3.14 의 결과는 두함수가 동일하지만, -3.14는 다른 값을 return 해줍니다.
'SQL' 카테고리의 다른 글
key value 파싱 방법 (0) | 2022.10.07 |
---|---|
20년 간 몰랐던 LTRIM RTRIM 사용법 (0) | 2022.08.30 |
[TIP] 테이블 레이아웃 조회 (0) | 2022.08.23 |
부서별 평균 월급보다 높은 월급의 사원 목록 구하기 (0) | 2022.07.19 |
Oracle 컬럼 자료형 NUMBER(3,2) 의미는? (0) | 2022.07.14 |