我有一对夫妇在性的C#
这是double
,我想这些存储在SQL Server中的表,但发现没有double
类型,所以什么是最好的使用, decimal
或float
?
这将存储纬度和经度值,所以我需要最准确的精度。
由于迄今的反应。
我有一对夫妇在性的C#
这是double
,我想这些存储在SQL Server中的表,但发现没有double
类型,所以什么是最好的使用, decimal
或float
?
这将存储纬度和经度值,所以我需要最准确的精度。
由于迄今的反应。
float
或者,如果你想要去的老派:
real
您也可以使用float(53),但它意味着同样的事情浮动。
( “真实” 等同于浮动(24),不浮动/浮子(53)。)
十进制(X,Y)的SQL Server类型是当你想精确十进制数字,而不是浮点数(可近似)。 这是相比于C#“小数”数据类型,这更像一个128位的浮点数。
MSSQL 浮动不具有完全相同的精度在.NET(尾数IIRC略有差异)的64位双类型,但它是足够接近的比赛对大多数应用。
使事情更加混乱,一个“浮动”在C#只有32位,所以它会在SQL更等同于真正/浮子(24)型MSSQL比浮动/浮子(53)。
在您的具体使用情况...所有你需要的是小数点后5位约一米精度范围内表示经度和纬度,而你只需要多达三个小数点的程度之前。 浮球(24)或十进制(8,5),将最适合在MSSQL您的需求,并在C#中使用浮动是不够好,你不需要双。 事实上,你的用户可能会感谢你四舍五入到5位小数,而不是一堆无关紧要的数字凑凑热闹到来。
此外, 这里是一个有用的图表SQL-CLR类型映射一个很好的答案。
从该职位(由大卫 ):
正如大多数人所指出的, float
是正确答案。 请参阅微软的SQL Server上的文档- CLR数据类型映射了解更多信息。
浮法是最接近的等效。
SqlDbType枚举
编辑:
对于纬度/经度为OP提及。
米是纬度的1/40000000 1秒大约30米。 浮法/双给你15个显著数字。 随着一些快速和狡猾的心算......舍入/逼近误差将是这个填充站的长度 - >“”
你应该映射它FLOAT(53) -这是LINQ到SQL呢 。
float
在SQL Server实际上有[编辑:几乎]精度的“双规”(在C#中的意义)。
float
为同义词float(53)
53是尾数的比特。
.NET double
采用54位为尾数。
有一个MSDN上的伟大线程描述FLOAT和DECIMAL之间的主要区别。 总之,浮动是近似值,不能代表一定价值。
看看接受的答案。
对于SQL Sever的:
小数类型是符号数浮球128位是一个64位带符号的数。
真正的答案是浮动的,我是不正确的约小数。
原因是,如果你使用一个小数,你将永远不会填充物64位小数类型。
但如果你尝试使用整型小数不会给你一个错误。
这里是类型的一个很好的基准图表。
@Achilles好极了! 来到这里呆了TINYINT的两倍。
下面是部分完成开关情况下DataTable,并SQL之间的转换:
switch (columnDataTypeList[i])
{
case "System.String":
columnDataTypeList[i] = "VARCHAR(MAX)";
break;
case "System.Int32":
columnDataTypeList[i] = "INT";
break;
case "System.DateTime":
columnDataTypeList[i] = "DATE";
break;
case "System.Double":
columnDataTypeList[i] = "FLOAT";
break;
}
该字符串可以是一个问题,请务必将其编辑成自己需要的,但双应工作是手头上的问题。
这听起来像你可以挑选。 如果你选择浮动,你可能会失去精度11位。 如果这是可以接受的,去了 - 显然LINQ的设计师认为这是一个很好的权衡。
但是,如果你的应用程序需要这些额外的数字,使用十进制。 十进制(正确实现)是方式比浮法更准确无论如何 - 从基座10没有凌乱翻译到基座2和背部。
是不是有已经映射在System.Data.Sql类?
请参阅: C#:SQL Server数据类型等效于.NET框架 。
现在,让我的一个浮...
在这种情况下是使用的,下面就是我通常所说的链接(我结束了在这个时间上的第一谷歌这个线程!)。
它有更多的以前的链接信息发布,因为它显示了SqlDataReader的程序和枚举(除了.NET和SQL类型比较)
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings
(是浮动!)
一个Float
代表double
在SQL服务器。 你可以找到在Visual Studio中的C#编码的证明。 在这里,我已经宣布Overtime
为Float
在SQL Server和C#。 因此,我能够转换
int diff=4;
attendance.OverTime = Convert.ToDouble(diff);
这里OverTime
声明float type