반응형
안녕하세요 오랜만에 글을 씁니다.
이번에 개발하던 도중에 소수점을 통해 올림을 해야하는 경우가 발생하여 찾다가 생각한 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
,@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 |