IT/MSSQL

[MSSQL] ROUND를 이용한 소수점 올림

유자애플 2021. 12. 15. 00:10
반응형

안녕하세요 오랜만에 글을 씁니다. 

이번에 개발하던 도중에 소수점을 통해 올림을 해야하는 경우가 발생하여 찾다가 생각한 SP 문을 공유하고자 합니다. 

 

CEILING    올림
FLOOR 내림
ROUND 반올림

 

올림과 내림은 소수점이 모두 사라집니다. 그래서 반올림을 통해 올림하는 방법을 공유하고자 합니다. 

 

DECLARE @INT DECIMAL(19,5)
,@digit INT
,@CNT INT =0
,@squ DECIMAL(19,5) = 1

SET @INT = 12.2814
SET @digit = 3

WHILE (1=1)
BEGIN

IF @digit = @CNT BREAK

SET @squ = @squ * 0.1
SET @CNT = @CNT + 1
END

SELECT ROUND(@INT,@digit)
SELECT CASE WHEN @INT - ROUND(@INT,@digit) > 0 THEN ROUND(@INT,@digit) + (@squ)
ELSE ROUND(@INT,@digit) END 

@INT는 올림 처리할 소수점 변수입니다.

 

@digit는 소수점 몇번째에서 올림을 받을지 설정을 해주는 변수입니다.

(* @digit가 3이라면 0.001 4번째자리가 있을 경우 3번째 자리로 올려라) 

 

@CNT는 카운터 변수입니다. WHILE문을 위한 변수

 

@squ는 CASE문ㅇ르 통해 입력한 값과 반올림한 숫자를 뺄셈으로 사칙연산 후 이를 통해 존재하면 올림처리하기 위해서 그 자리수의 입력을 넣어주는 변수입니다. 

(12.981 이라는 변수를 소수점 3번째자리에서 올림처리할 경우 12.981 - 12.980으로 뺼셈하면 0.001이 남습니다. 그러면 그것을 통해 0.01을 상승시켜주어 12.99로 만들어 주기 위한 변수입니다. )  

 

반응형

'IT > MSSQL' 카테고리의 다른 글

[MSSQL]테이블 / 뷰테이블 컬럼 조회  (0) 2022.05.26
[MSSQL]저장 프로시저에서 내용 찾기  (0) 2022.05.02
[MSSQL] PROCEDURE 기본값 설정  (0) 2021.07.14
[MSSQL] LEN, REPLACE - PART 1  (0) 2020.06.15
[MSSQL] DISTINCT 중복제거  (0) 2020.06.06