안녕하세요 형님들
mssql 초보입니다.
나누기 질문이 있어서 글을 남깁니다.
1. SELECT CONVERT(DECIMAL(4,1),((CONVERT(FLOAT, 21) / CONVERT(FLOAT,70)+ 0) * 100) -0.05)
2. SELECT CONVERT(DECIMAL(4,1), 30 - 0.05)
1번과 2번이 둘다
29.95 가나옵니다.
하지만 decimal 로 소수1째자리까지 자르니깐
1번은 29.9
2번은 30.0 이 나오는데 혹시 이유를 알 수 있을까요?
Comment 4
-
SQL초짜of초짜
2015.07.03 14:55
-
카르페디엠
2015.07.03 15:35
초짜님 답변감사드립니다~
근데 궁금한점이
21 나누기 70은 0.3 으로 뚝떨어져서
흠...이해가 잘 가지 않습니다..ㅜㅜ
-
SQL초짜of초짜
2015.07.03 16:25
질문을 드리지요...
select 10/3 무슨 값이 나오나요?? 3입니다..
select 10.0 / 3.0 무슨 값이 나오나요? 3.333333 입니다.
과연 답이 10/3 이 3인가요? 3.333333 인가요???
실제정답은 3.33333333333333333333333333333333.....무한이죠?
컬럼의 캐릭터에 따라서 자르거나 반올림되거나 하는 것입니다.
질문의 취지는 float vs decimal의 차이를 보여주는 것으로서
29.9999999999999999... - 0.05를 하여 값을 29.949999999999...로 만들어서
소수점 둘째 자리를 반올림하여 29.9로 보여지게 되는것입니다.
-
카르페디엠
2015.07.03 17:58
와..
초짜님 정말 감사합니당.
많이 배우고갑니다!!
float 및 real 데이터 형식은 근사 데이터 형식입니다. float 및 real의 동작은 근사 숫자 데이터 형식에 대한 IEEE 754 사양을 따릅니다
라고 나와있네요..
실제적으로 정확한 계산을 하기 위해서는 Float 형식을 사용하지 않습니다.
아마
(CONVERT(FLOAT, 21) / CONVERT(FLOAT,70)+ 0) * 100) 정확한 값은 29.9999999999999999999999999.........일 것 같습니다.