什么代表在SQL Server的双重?

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

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

感谢迄今的回应。

 float 

或者如果你想去老派:

 real 

你也可以使用float(53),但它和float一样。

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

十进制(x,y) SQL Servertypes用于当您需要精确十进制数而不是浮点数(可以是近似值)时。 这与C#“十进制”数据types相反,它更像是一个128位浮点数。

MSSQL 浮点数与.NET中的64位精度types的精确度并不完全相同 (尾数IIRC中的细微差别),但是这是大部分使用的足够接近的匹配。

为了使事情变得更加混乱,C#中的“float”只有32位,所以在SQL中与float / float(53)中的real / float(24)types更相似。

在您的具体使用情况下…您只需要小数点后5个位置表示纬度和经度在一米左右的精度内,您只需要小数点前三位即可。 浮点数(24)或十进制数(8,5)将最适合您在MSSQL中的需求,并且在C#中使用float已经足够了,您不需要翻倍。 事实上,你的用户可能会感谢你凑到5位小数,而不是有一堆微不足道的数字。

以下是到SQL Server的CLR数据types映射: http : //msdn.microsoft.com/zh-cn/library/system.data.sqldbtype.aspx

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

从那个post(由大卫 ): 在这里输入图像描述

正如大多数人所指出的, float是正确的答案。 有关更多信息,请参阅Microsoft的SQL Server上的文档 – CLR数据types映射 。

浮动是最接近的等值。

SqlDbType枚举

编辑:

对于纬度/长与OP提到。

一米是纬度的四千万分之一,一秒是三十米左右。 浮动/双重给你15位有效数字。 用一些快速和狡猾的心算……舍入/近似误差将是关于这个填充停止的长度 – “”。

你应该把它映射到FLOAT(53) – 这就是LINQ to SQL所做的 。

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

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

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

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

看看接受的答案。

对于SQL服务器:

十进制types是128位有符号数Float是一个64位有符号数。

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

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

尽pipe如果你尝试使用inttypes,decimal不会给你一个错误。

这是一个很好的types的参考图表。

这听起来像你可以挑选。 如果你select浮动,你可能会失去11个数字的精度。 如果这是可以接受的,那就去做 – 显然Linq的devise者认为这是一个很好的折衷。

但是,如果您的应用程序需要这些额外的数字,请使用小数 十进制(正确实施)比浮动方式更精确 – 从基数10到基数2以及后面没有杂乱的翻译。

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

string可能是一个问题,一定要编辑它,以满足您的需求,但双重应该工作,这是目前的问题。

System.Data.Sql类中没有映射吗?

请参阅: C#:.NET Framework中的SQL Server数据types等效项 。

现在,让我的浮动…