[C#] SQL Server에서 이중을 나타내는 것은 무엇입니까?

나는 몇 가지 속성을 C#가지고 있으며 doubleSQL Server의 테이블 에이 속성 을 저장하려고하지만 double유형 이 없으므로 사용하기 가장 좋은 방법 decimal또는 float?

위도 및 경도 값이 저장되므로 가장 정확한 정밀도가 필요합니다.

지금까지 답변 해 주셔서 감사합니다.



답변

float

또는 구식 학교를 가고 싶다면 :

real

float (53)을 사용할 수도 있지만 float와 같은 의미입니다.

( “실제”는 float / float (53)가 아니라 float (24)와 같습니다.)

진수 (x, y)는 SQL 서버 유형은 당신이 원하는 때입니다 정확한 오히려 포인트 (근사치가 될 수있는) 부동보다 진수를. 이는 128 비트 부동 소수점 숫자와 비슷한 C # “10 진수”데이터 형식과 대조됩니다.

MSSQL의 float 형식은 .NET 의 64 비트 double 형식과 같습니다. (2011 년 원래의 대답은 가수에 약간의 차이가있을 수 있다고 말했지만 2020 년에 이것을 테스트했으며 매우 작거나 큰 숫자의 이진 표현에서 100 % 호환되는 것으로 보입니다 -https : /를 참조 하십시오 내 테스트의 경우 /dotnetfiddle.net/wLX5Ox ).

상황을 좀 더 혼란스럽게 만들기 위해 C #의 “float”는 32 비트에 불과하므로 SQL에서 float / float (53)보다 MSSQL의 real / float (24) 유형과 동일합니다.

특정 사용 사례에서 …
약 1 미터 정밀도 내에서 위도와 경도를 나타내려면 소수점 다음에 5 자리가 필요하며 도의 소수점 앞에 최대 3 자리 만 있으면됩니다. Float (24) 또는 decimal (8,5)는 MSSQL의 요구 사항에 가장 잘 맞으며 C #에서 float을 사용하는 것이 충분하므로 이중이 필요하지 않습니다. 실제로, 사용자는 아마 작은 숫자를 타기보다는 소수점 이하 5 자리로 반올림 해 주셔서 감사 할 것입니다.


답변

또한, 여기에 유용한 차트 SQL-CLR 형식 매핑에 대한 좋은 답변입니다.

그 게시물에서 ( David가 ) :
여기에 이미지 설명을 입력하십시오


답변

float는 가장 가까운 값입니다.

SqlDbType 열거

OP가 언급 한 Lat / Long의 경우.

미터는 위도의 1 / 40,000,000이고 1 초는 약 30 미터입니다. float / double은 15 개의 유효 숫자를 제공합니다. 빠르고 피상적 인 정신 산술로 반올림 / 근사 오류는이 채우기 중지의 길이-> “입니다.”


답변

FLOAT (53)에 매핑해야합니다 . 이것이 LINQ to SQL의 기능 입니다.


답변

float SQL Server에서 실제로 “edit : 거의”정밀도는 “double”(C # 의미)입니다.

float의 동의어입니다 float(53). 53은 가수의 비트입니다.

.NET double은 가수에 54 비트를 사용합니다.


답변

SQL Sever의 경우 :

10 진수 유형은 128 비트 부호있는 숫자입니다. Float는 64 비트 부호있는 숫자입니다.

실제 대답은 Float 입니다. 소수점에 대해서는 틀 렸습니다.

그 이유는 10 진수를 사용하면 64 비트의 10 진수 유형을 채우지 않기 때문입니다.

int 유형을 사용하려고하면 10 진수로 오류가 발생하지 않습니다.

다음 은 유형에 대한 멋진 참조 차트입니다.


답변

선택하고 선택할 수있는 것 같습니다. float를 선택하면 11 자리의 정밀도가 떨어질 수 있습니다. 그것이 받아 들여 진다면, Linq 디자이너들은 이것이 좋은 트레이드 오프라고 생각한 것 같습니다.

그러나 응용 프로그램에 추가 자릿수가 필요한 경우 십진수를 사용하십시오. 십진법 (정확하게 구현 됨)은 어쨌든 부동 소수점보다 훨씬 정확합니다. 10 진법에서 2 진법으로의 변환은 뒤지지 않습니다.