안녕하세요
소숫점 처리를 하면서 이상한 결과가 나와서 질문드립니다.
아래 두개의 결과값이 10.60 과 10.59입니다. 왜 결과값이 다른것인가요?
ROUND에 값을 입력하는거와 변수에 담아서 처리하는거와 차이가 있나요?
제가 원하는 결과값은 10.60 입니다.
DECLARE @rate float
DECLARE @bonus_rate float
SET @rate = 10.60
SET @bonus_rate = 1
SELECT ROUND(10.60 * 1, 2,1)
SELECT ROUND( @rate * @bonus_rate, 2,1)
Comment 3
-
이리
2018.04.20 14:29
-
embster
2018.04.20 16:53
답변감사합니다.
먼저 varchar 변환한후에 다시 numeric 으로 계산해서 해결했습니다.
-
축구선수
2018.04.20 15:42
MSSQL에서도 동일한지는 모르겠지만
간혹 코딩하다 보면 컴퓨터가 소수점 자리 계산시 어셈블리언어 단계(?)인가 거기서 변환시
문제가 발생하여 결과 값이 틀리게 나오는 경우가 있습니다....
문제 처리 방식은 저도 아직 찾고 있는데 명쾌한 답을 못찾았네요ㅠ
그래서 저러한 경우 발생할 때 그냥 예외 처리를 해서 사용했던 기억이 있네요
꼭 float 자료형을 사용하셔야 하는건지요?
근사치를 사용하셔야 하면 real을 쓰시고 아니라면 numeric이나 decimal을 사용해보세요
https://docs.microsoft.com/ko-kr/sql/t-sql/data-types/data-types-transact-sql