Answers:
float
或者,如果您想去老学校:
real
您也可以使用float(53),但这与float含义相同。
(“真实”等效于float(24),而不是float / float(53)。)
该小数(X,Y)的SQL Server类型是当你想确切的十进制数字,而不是浮点数(可近似)。这与C#“十进制”数据类型相反,后者更像是128位浮点数。
MSSQL的float类型等效于.NET中的64位double类型。(我在2011年的原始答案表示尾数可能会略有差异,但我在2020年对此进行了测试,它们在非常小的数字和非常大的数字二进制表示中似乎都100%兼容-请参阅https:/ /dotnetfiddle.net/wLX5Ox进行测试)。
为了使事情更加混乱,C#中的“浮点数”只有32位,因此在SQL中它与MSSQL中的real / float(24)类型等效于与float / float(53)比较。
在您的特定用例中... 您所需要的只是小数点后5位,以表示大约一米的精度内的纬度和经度,并且度数的小数点前最多只需要三位数字。浮点数(24)或十进制(8,5)最适合您在MSSQL中的需求,并且在C#中使用浮点数就足够了,您不需要加倍。实际上,您的用户很可能会感谢您舍入到小数点后5位,而不是一堆无关紧要的数字。
float是最接近的等效项。
对于经纬度,如OP所述。
米是纬度的1 / 40,000,000,1秒是30米左右。浮点数/双数为您提供15个有效数字。使用一些快速而狡猾的心理算术,四舍五入/近似误差将约为该填充停止点的长度->“。”
您应该将其映射到FLOAT(53)-LINQ to SQL就是这样做的。
float
SQL Server中的SQL实际上具有[double:]精度(在C#方面)。
float
是的同义词float(53)
。53是尾数位。
.NET double
使用54位尾数。
对于SQL Server:
十进制类型是128位带符号数字Float是64位带符号数字。
真正的答案是Float,我对小数不正确。
原因是如果使用十进制,则永远不会填充十进制类型的64位。
尽管如果尝试使用int类型,十进制不会给您错误。
这是一个不错的类型参考表。
听起来您可以选择。如果选择float,则可能会损失11位数字的精度。如果可以接受,那就继续吧–显然Linq设计师认为这是一个不错的权衡。
但是,如果您的应用程序需要这些额外的数字,请使用十进制。无论如何,十进制(正确实现)比浮点数更准确-从基数10到基数2以及返回基数都不会造成混乱。
在SQL Server中Float
代表A。double
您可以从Visual Studio中C#中的编码中找到证明。在这里,我在SQL Server和C#中声明Overtime
为a Float
。这样我就可以转换
int diff=4;
attendance.OverTime = Convert.ToDouble(diff);
这里OverTime
宣布float type