2013-02-27 1 views
0

는 이해 float and real are 그 : 숫자 데이터 부동 소수점에 사용실제 및 부동 소수점 수의 소수점 길이와 정확성

대략 번호 데이터 형식. 부동 소수점 데이터는 근사값입니다. 따라서 의 모든 값이 데이터 유형 범위를 정확하게 나타낼 수있는 것은 아닙니다.

그러나, 다음 예 :

Q1 : '플로트 (24)' 이유 (즉, 실시간)의 더 소수 보다 제공 '플로트 (53) ' 아직 정확도가 낮습니까?

Q2 : 그것은 반올림하지 않고 그대로가 어떻게 숫자 필드에 @s를 저장합니까?

declare @s varchar(50) = '34.770438199999944' 
select convert(float(24), @s) real_, convert(float(53), @s) float_ 

Results

|    real_ |  float_ | 
------------------------------------ 
| 34.77043(9147949) | 34.77043(82) | 

답변

0

Q1을 (브래킷은 diff 더 명확하게 할 수 있습니다). 그것은 단지 디스플레이 문제 일뿐입니다. 다른 숫자는 다를 수 있습니다. 더 잘 맞을 곳이 둥글게됩니다 (숫자의 실제 근사치에 더 가깝습니다). 숫자를 저장할 데이터가 적기 때문에 정확도가 떨어집니다.

Q2. mssql (태그 state sql-server)에서 십진수를 만들 수 있으며, 정밀도 손실없이 숫자를 저장합니다. 하지만 저장할 수있는 전화 번호는 제한되어 있습니다.

+0

숫자를 저장할 데이터가 적기 때문에 덜 정밀도가 낮습니까? 부유물인가 진짜인가? – Kaf

+0

음 .. 모든 숫자는 부동 소수점이거나 여러 비트로 표현됩니다. 예를 들어, 1 바이트 = 8 비트. 0에서 255 사이의 숫자를 유지할 수 있습니다 (2^8 숫자). 2 바이트 숫자로 가면 2^16이됩니다. 부동 소수점을 사용하면 추론은 비슷하지만 숫자는 그대로 저장되지 않고 사실 숫자 인 2 자리와 지수로 저장됩니다. 이 2를 사용하면 아주 큰 범위의 수를 근사 할 수 있습니다. 이제 float 및 real은 다른 바이트 수로 표현됩니다. 2 개의 숫자를 저장하는 바이트가 더 많은 플로트는 데이터를 훨씬 정확하게 저장할 수 있습니다. –