什么情况表示SQL Server中的双?(What represents a double in s

2019-06-17 20:50发布

我有一对夫妇在性的C#这是double ,我想这些存储在SQL Server中的表,但发现没有double类型,所以什么是最好的使用, decimalfloat

这将存储纬度和经度值,所以我需要最准确的精度。

由于迄今的反应。

Answer 1:

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位小数,而不是一堆无关紧要的数字凑凑热闹到来。



Answer 2:

此外, 这里是一个有用的图表SQL-CLR类型映射一个很好的答案。

从该职位(由大卫 ):



Answer 3:

正如大多数人所指出的, float是正确答案。 请参阅微软的SQL Server上的文档- CLR数据类型映射了解更多信息。



Answer 4:

浮法是最接近的等效。

SqlDbType枚举

编辑:

对于纬度/经度为OP提及。

米是纬度的1/40000000 1秒大约30米。 浮法/双给你15个显著数字。 随着一些快速和狡猾的心算......舍入/逼近误差将是这个填充站的长度 - >“”



Answer 5:

你应该映射它FLOAT(53) -这是LINQ到SQL呢 。



Answer 6:

float在SQL Server实际上有[编辑:几乎]精度的“双规”(在C#中的意义)。

float为同义词float(53) 53是尾数的比特。

.NET double采用54位为尾数。



Answer 7:

有一个MSDN上的伟大线程描述FLOAT和DECIMAL之间的主要区别。 总之,浮动是近似值,不能代表一定价值。

看看接受的答案。



Answer 8:

对于SQL Sever的:

小数类型是符号数浮球128位是一个64位带符号的数。

真正的答案是浮动的,我是不正确的约小数。

原因是,如果你使用一个小数,你将永远不会填充物64位小数类型。

但如果你尝试使用整型小数不会给你一个错误。

这里是类型的一个很好的基准图表。



Answer 9:

@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;
}

该字符串可以是一个问题,请务必将其编辑成自己需要的,但双应工作是手头上的问题。



Answer 10:

这听起来像你可以挑选。 如果你选择浮动,你可能会失去精度11位。 如果这是可以接受的,去了 - 显然LINQ的设计师认为这是一个很好的权衡。

但是,如果你的应用程序需要这些额外的数字,使用十进制。 十进制(正确实现)是方式比浮法更准确无论如何 - 从基座10没有凌乱翻译到基座2和背部。



Answer 11:

是不是有已经映射在System.Data.Sql类?

请参阅: C#:SQL Server数据类型等效于.NET框架 。

现在,让我的一个浮...



Answer 12:

在这种情况下是使用的,下面就是我通常所说的链接(我结束了在这个时间上的第一谷歌这个线程!)。

它有更多的以前的链接信息发布,因为它显示了SqlDataReader的程序和枚举(除了.NET和SQL类型比较)

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings

(是浮动!)



Answer 13:

一个Float代表double在SQL服务器。 你可以找到在Visual Studio中的C#编码的证明。 在这里,我已经宣布OvertimeFloat在SQL Server和C#。 因此,我能够转换

int diff=4;
attendance.OverTime = Convert.ToDouble(diff);

这里OverTime声明float type



文章来源: What represents a double in sql server?