소수점 한자리까지 통계 계산을 하려는데....
SELECT ROUND(convert(real,A.[SUM_TOTAL])/convert(real,B.CNT), 1, 1 ) .....
이렇게 했더니 REAL은 너무 크다고 DECIMAL을 사용하라고 하더라구요.
메뉴얼을 봐도 저는 잘 가늠이 안갑니다.
DECIMAL이라는 자리수를 이해를 못하는건가...
REAL은 4바이트라고 되어 있고, DECIMAL은 5바이트라고 하는데, DECIMAL이 더 큰거 아닌가요?
REAL : http://msdn.microsoft.com/ko-kr/library/ms173773.aspx
real | - 3.40E+38에서 -1.18E - 38, 0과 1.18E-38에서 3.40E + 38 | 4바이트 |
DECIMAL : http://msdn.microsoft.com/ko-kr/library/ms187746.aspx
전체 자릿수 | 저장소 크기(바이트) |
---|---|
1 - 9 | 5 |
SELECT ROUND(convert(real, 일만단위숫자 /convert(real, 십단위숫자 ), 1, 1 ) .....
==> 결과값을 소수점 한자리까지 받으려니까 정수를 convert 해야되는데
, REAL이라는 타입으로 변환한 뒤 연산하는 것이 어떤지 여쭤봅니다.
Comment 1
-
초짜해커
2014.07.18 12:36
REAL은 4바이트 DECIMAL은 5바이트 이상을 차지하는건 맞습니다.
하지만 범위가 다르죠.
REAL의 경우 38자리까지 표현 가능하지만
5바이트를 사용하는 DECIMAL(9,0)은 9자리까지만 표현가능합니다.
DECIMAL로 38자리까지 표현하려면 17바이트를 차지하게 됩니다.
"크다"가 숫자가 크다인지 저장소의 크기가 크다인지에 따라 다르게 해석되겠네요.
그리고 REAL은 근사 숫자 데이터 형식입니다.
항상 값이 정확하게 나온다고 보장 할 수가 없습니다.