2014-10-17 4 views
0

아래 쿼리가 있습니다.SQL 데이터 유형 반올림

declare 
@a NUMERIC(20,4) 
set @a=24900*0.3333333333 
select @a 

나는 8299.999999을 기대하고 있지만 8300.00을 제공합니다. 어떤 시체가 나를 도울 수 있습니까?

답변

2

당신의 결과는 반올림 당신이 당신의 처분에 겨우 4 소수를 가지고있다. 사용

set @a = round(24900*0.3333333333, 4, 1) 

결과는 반올림되지 않고 잘립니다.

0.12346과 같은 값이 0.1234으로 잘리고 0.1235으로 반올림되지 않기 때문에 원하는지 알 수 없습니다.

+0

네, 반올림하지 않고 자르면 잘립니다. 잘 했어. – user2107843

0

는이 같은이 또는 뭔가를 할 수 있습니다 :

declare @a NUMERIC(20,6) 
set @a=cast(24900 as numeric(20,6))*cast(0.3333333333 as numeric(20,10)) 
select @a 
+0

20,6 개가 작동합니다. – user2107843

+1

이것은이 특별한 경우에 작동하지만 여전히 특정 문제가 발생할 수 있습니다. 아래에 제안 된 'ROUND' 솔루션이 더 나은 옵션입니다. – Andrew

+0

앤드류 (Andrew)의 요지가 적다. –

1

8299.9999991700로 평가 식 24900*0.3333333333 다음의 결과가 자동으로 단지 4 소수 (NUMERIC(20,4))로 규모로 반올림하기 때문에 (

declare @a NUMERIC(20,4) 
set @a=24900*0.3333333333 
select @a AS [@a], 
    24900*0.3333333333 AS [result #1], 
    ROUND(24900*0.3333333333, 4) AS [result #2], 
    ROUND(24900*0.3333333333, 4, 1) AS [result #3] 
/* 
@a  result #1  result #2-round result #3-trunc 
--------- --------------- --------------- --------------- 
8300.0000 8299.9999991700 8300.0000000000 8299.9999000000 
*/ 

용액을 ROUND(exp, 4, 1)를 사용하여 4 개 소수의 결과를 절단하는 결과 # 3 참조).