2013-07-14 2 views
0
declare @alpha float 
declare @tmp int 

set @tmp = 6 
set @alpha = 1/@tmp 

select @alpha 
     >> Here @alpha is echoed as 0 

declare @tmp1 float 

set @tmp1 = 6 
set @alpha = 1/@tmp1 

select @alpha 
     >> Here @alpha is echoed as 0.1666666 

적어도 경고를 던졌지 만 컴파일러에서 경고를 표시하지 않으면 문제가되지 않습니다. 아니면 자동으로 원하는 캐스트로 변환하는 같은 종류의 캐스트 작업에 대한 컴파일러 설정이 있습니다.Sql int에서 float 로의 변환 변환

int를 float로 변환하는 것이 어렵지 않다는 것을 의미하며 그 반대도 내 이유입니다. 다른 논리적 인 질문은 날짜 변수를 varchar 변수로 허용하지 않으면 왜 int에서 float까지 허용해야하며 바람직하지 않은 결과를 초래하게됩니다.

+0

@alpha 변수를 부동 소수점으로 설정했기 때문에 – user1974729

+1

컴파일러는 정수 수학 또는 부동 소수점 연산을 원할 때 알 수 없으므로 경고를 줄 수 없습니다. – Andomar

+0

예요 내가 게시의 일부를 놓친 거예요 @ 알파 부동 .. 그래서 컴파일러는 변수에 맞게 더 많은 공간을 가지고 있고 그것이 부동 소수점 수학이라고 추론 .. 수학 계산을하고 있지만 괜찮아요 저를 경계하지 않으며 저것을 찾아 낸다 다소 이상한 – user1974729

답변

0

어쩌면이 link 어쩌면 당신이 캐스트를 사용하거나 divison 후 기능을 변환하거나 그 운영의 일부 (당신이해야 할 일의 dependending)의 float 값을 사용한다, 도움이 될 것입니다 때문에 :

반환 우선 순위가 높은 인수의 데이터 유형 자세한 내용은 Data Type Precedence (Transact-SQL)을 참조하십시오. 정수 배당은 정수 제수로 나눈 경우, 결과는 몇 가지 예

Here 절두 결과의 소수부를 갖는 정수이다.