데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요
소숫점 처리를 하면서 이상한 결과가 나와서 질문드립니다.
아래 두개의 결과값이 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