2016-12-07 4 views
1

숫자가 있습니다 (예 : 11.61). 나는 다음 부서를 만든다 : 1/11.61. 1/@value2SQL 나누기 번호로 앞뒤 반올림 오류가 발생합니다.

SET @value1 = 1/@value2 

결과는

(No column name)  (No column name) 
11.61000000000000079000 0.08613264427217915000 

원래 예상 값과 같습니다

DECLARE @value1 numeric(28, 20) 
     ,@value2 numeric(28, 20) 

SET @value1 = 11.61 
SET @value2 = 1/@value1 

결과는 그때 분할을 반대 할

(No column name)  (No column name) 
11.61000000000000000000 0.08613264427217915000 

처럼 에스 11.61이되어야합니다. 그러나 결과는 11.61000000000000079000입니다. 어떻게이 오류를 피할 수 있습니까?

+5

컴퓨터가 가능한 모든 실수를 나타낼 수 없습니다. 그들은 무한한 숫자입니다. 그래서 그들은 표현할 수있는 가장 가까운 것을 사용합니다. 그 결과 불일치가 매우 작습니다. 체중이 120 파운드이고 120.00000000000000001 파운드가 아니라면 신경 써야합니까? 그렇다면 소수점 이하 (28,2)로 선언하거나 소수점 이하 2 자리로 반올림하십시오. –

+0

도 [this] (https://stackoverflow.com/questions/1987452) 질문에 대한 답변 : https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html을 참조하십시오. – SeanC

답변

0

사용 CASTCAST(@value1 as decimal(10,2)) 같은 및 CAST(@value2 as decimal(10,2)) 는 만 2 소수점을 표시합니다.