什么代表sql server中的double?

时间:2009-07-30 20:34:03

标签: c# sql sql-server sql-server-2005 tsql

我在C#中有几个double属性,我想将它们存储在SQL Server的一个表中,但是注意到没有double类型,那么什么是最好用,decimalfloat

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

感谢到目前为止的回复。

13 个答案:

答案 0 :(得分:354)

float

或者如果你想上老学:

real

你也可以使用float(53),但它与float相同。

(“real”相当于float(24),而不是float / float(53)。)

十进制(x,y) SQL Server类型适用于需要精确十进制数而不是浮点数(可以是近似值)的情况。这与C#“十进制”数据类型形成对比,后者更像是一个128位浮点数。

MSSQL float 完全的精度不同于.NET中的64位 double 类型(尾数IIRC略有差异) ,但它足以与大多数用途相匹配。

为了让事情更加混乱,C#中的“float”只有32位,因此在SQL中,它与MSSQL中的real / float(24)类型相比,与float / float(53)相当。

在您的具体用例中...... 您所需要的只是小数点后面的5个位置,表示大约一米精度内的纬度和经度,并且您只需要在小数点前最多三位数。 Float(24)或十进制(8,5)最适合您在MSSQL中的需求,并且在C#中使用float是足够好的,您不需要double。事实上,您的用户可能会感谢您将其舍入到小数点后5位,而不是为了骑行而出现一堆无关紧要的数字。

答案 1 :(得分:44)

此外,对于带有用图表的SQL-CLR类型映射,here是一个很好的答案。

从该帖子(David): enter image description here

答案 2 :(得分:14)

float是最接近的等价物。

SqlDbType Enumeration

编辑:

对于OP提到的Lat / Long。

一米是纬度的1 / 40,000,000,1秒是30米左右。 Float / double给你15个有效数字。使用一些快速和狡猾的心算... ...舍入/近似误差将是关于该填充停止的长度 - > “”

答案 3 :(得分:14)

正如大多数人所说,float是正确答案。有关详细信息,请参阅Microsoft's documentation on SQL Server - CLR datatype mapping

答案 4 :(得分:9)

你应该将它映射到FLOAT(53) - 这就是LINQ to SQL does

答案 5 :(得分:7)

SQL Server中的

float实际上[编辑:几乎]精度为“double”(在C#意义上)。

floatfloat(53)的同义词。 53是尾数的位。

.NET double使用54位作为尾数。

答案 6 :(得分:5)

对于SQL Sever:

十进制类型是128位有符号数 Float是64位有符号数。

真正的答案是 Float ,我对小数字不正确。

原因是如果使用小数,则永远不会填充64位的十进制类型。

虽然如果你尝试使用int类型,decimal不会给你一个错误。

Here是一个很好的参考图表类型。

答案 7 :(得分:5)

有一个great thread on MSDN描述了FLOAT和DECIMAL之间的主要区别。简而言之,Float是近似值,不能代表某些值。

看看接受的答案。

答案 8 :(得分:3)

@Achilles非常好!来到这里为TinyInt留了双倍。

以下是在dataTable和SQL之间进行转换的部分完成的switch case:

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

字符串可能是一个问题,请务必根据您的需要进行编辑,但双重应该可以解决手头的问题。

答案 9 :(得分:2)

听起来你可以挑选。如果选择float,则可能会丢失11位精度。如果这是可以接受的,那就去吧 - 显然Linq设计师认为这是一个很好的权衡。

但是,如果您的应用程序需要这些额外数字,请使用小数。无论如何,十进制(正确实现)比浮点更准确 - 从基数10到基数2和背面没有杂乱的转换。

答案 10 :(得分:1)

System.Data.Sql类中是否已存在映射?

请参阅:C#: SQL Server data types equivalents in .NET Framework

现在,让我的漂浮......

答案 11 :(得分:1)

如果这是有用的,下面是我通常所指的链接(这次我最终在第一个谷歌的这个帖子!)。

它包含以前发布的链接的附加信息,因为它显示了SqlDataReader过程和枚举(除了.NET和SQL类型比较)

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

(是的漂浮!)

答案 12 :(得分:-1)

Float表示SQL Server中的double。您可以在Visual Studio中的C#中找到编码证明。在这里,我在SQL服务器和C#中将Overtime声明为Float。因此我能够转换

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

此处OverTime已声明为float type