2015-01-25 2 views
2

다른 프로 시저 내에서 저장 프로 시저를 호출해야하는 연습 과제를 진행 중입니다. 호출되는 프로 시저는 단순히 두 개의 숫자를 나눕니다. 그러나 결과는 반올림 된 것처럼 보입니다.10 진수 형식의 SQL에서 반올림 방지

연습 문제에서 5.0을 10.0으로 나눈 결과는 1입니다. 결과는 분명 0.5 여야합니다. 목표는 DECIMAL 유형을 변경하지 않고 출력을 올바르게 표시하는 것입니다.

어떤 도움을 주시면 감사하겠습니다
GO 

CREATE PROCEDURE uspDivide2Numbers 
    @decValue1 AS DECIMAL 
    ,@decValue2 AS DECIMAL 
    ,@decResult AS DECIMAL OUTPUT 
AS 
SET NOCOUNT ON 

SELECT @decResult = @decValue1/@decValue2 

GO 


CREATE PROCEDURE uspCallAnotherStoredProcedure 
AS 
SET NOCOUNT ON 

DECLARE @decResult AS DECIMAL 

EXECUTE uspDivide2Numbers 5.0, 10.0, @decResult OUTPUT 

SELECT @decResult AS decResult 

GO 

uspCallAnotherStoredProcedure 

, 내가 정말 왜 처음부터 소수 값의 라운드, 아마 내 말에 문제가 그래서 이해가 안 : 여기

는 코드입니다.

+1

'DECIMAL'에 대한 정밀도를 지정하지 않는 이유가 있습니까? –

답변

5

decimal의 기본 눈금은 0입니다. 즉, 가지고있는 것은 실제로 정수 유형입니다. 따라서 데이터 유형을 변경하지 않고 0.5 값을 반환 할 수 없습니다.

decimal(18,2)과 같이 유형의 정밀도와 배율을 지정하면 정수가 아닌 숫자를 처리 할 수 ​​있습니다. 스케일은 소수 자릿수 뒤에 얼마나 많은 자릿수가 저장 될지입니다.


필요에 따라 float and real 부동 소수점 데이터 형식을 고려할 수도 있습니다.

+0

이것은 정확히 내가 필요로하는 것이었고, 과거에는 MySQL의 정밀도에 대해 아무것도 배웠지 않았기 때문에 엄청난 도움이되었습니다. 감사! – user3530169

관련 문제