나는 몇 가지 속성을 C#
가지고 있으며 double
SQL Server의 테이블 에이 속성 을 저장하려고하지만 double
유형 이 없으므로 사용하기 가장 좋은 방법 decimal
또는 float
?
위도 및 경도 값이 저장되므로 가장 정확한 정밀도가 필요합니다.
지금까지 답변 해 주셔서 감사합니다.
나는 몇 가지 속성을 C#
가지고 있으며 double
SQL 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 자리로 반올림 해 주셔서 감사 할 것입니다.
float는 가장 가까운 값입니다.
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 진법으로의 변환은 뒤지지 않습니다.
A Float
는 double
SQL 서버에서 나타냅니다 . Visual Studio의 C # 코딩에서 증명을 찾을 수 있습니다. 여기 에서는 SQL 서버와 C #으로 선언 Overtime
했습니다 Float
. 따라서 나는 변환 할 수 있습니다
int diff=4;
attendance.OverTime = Convert.ToDouble(diff);
여기 OverTime
에 선언float type