SQL

floor vs trunc

멋쟁이천재사자 2022. 7. 13. 08:55

소수를 정수로 처리하는 경우 반올림을 주로 하지만, 가끔은 절사나 올림 내림 처리도 하지요.

 

3.14 를 3으로 변환하는 방법은 무엇까요?

두가지 방법이 가능하겠습니다.

 

floor(3.14) 또는 trunc(3.14) 입니다.

 

저는 내림은 floor 로 하고 절사는 trunc 처리를 하면서도, 막연하게는 두 개들 동일시 해왔던 것 갔습니다.

얼마전 문득 결과가 항상 동일하다면 두개가 있을 이유가 없을 터이고, 두개의 차이가 무엇일까 궁금해졌습니다.

 

그래서 Oracle SQL Language Reference 를 좀더 꼼꼼히 확인해 보았습니다.

FLOOR (oracle.com)

 

FLOOR

FLOOR Syntax Description of the illustration ''floor.gif'' Purpose FLOOR returns the largest integer equal to or less than n. The number n can always be written as the sum of an integer k and a positive fraction f such that 0 <= f < 1 and n = k + f. The va

docs.oracle.com

 

 

TRUNC (number) (oracle.com)

 

TRUNC (number)

TRUNC (number) Syntax trunc_number::= Description of the illustration ''trunc_number.gif'' Purpose The TRUNC (number) function returns n1 truncated to n2 decimal places. If n2 is omitted, then n1 is truncated to 0 places. n2 can be negative to truncate (ma

docs.oracle.com

 

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 해줍니다.