什么代表sql server中的double?

Xai*_*oft 320 c# sql t-sql sql-server sql-server-2005

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

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

感谢到目前为止的回复.

ric*_*ent 372

float
Run Code Online (Sandbox Code Playgroud)

或者如果你想去老派:

real
Run Code Online (Sandbox Code Playgroud)

你也可以使用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位,而不是为了骑行而出现一堆无关紧要的数字.

  • 你说浮点数,大卫说小数点,现在我更糊涂了:) (2认同)
  • 我必须同意,并承认我偏离了基地。我是在 IBM DB2 世界中接触到十进制的,其中十进制是一种真实的数据类型,IBM 平台上的所有代码和数据库都支持它。并不是说它在 MS 世界中不是一种真正的数据类型,而是在 IBM 阵营中不受支持。很抱歉造成任何混淆。 (2认同)
  • “MSSQL 浮点数与 .NET 中的 64 位双精度类型的精度不完全相同(尾数 IIRC 略有不同),但它与大多数用途的匹配度足够接近。” 你有这方面的参考吗?据我所知,两者都使用 53 位有效数,使用 64 位存储,并且具有与 IEEE 754 相同的位布局和含义。 (2认同)
  • 我也很好奇@codekaizen 提出的问题(尾数略有不同)。您有参考资料或测试来说明这一点吗? (2认同)

Maz*_*aie 52

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

从那篇文章(大卫): 在此输入图像描述


gbn*_*gbn 15

float是最接近的等价物.

SqlDbType枚举

编辑:

对于Lat/Long,如OP所述.

一米是纬度的1/40,000,000,1秒是30米左右.Float/double给你15个有效数字.有一些快速和狡猾的心算...圆角/近似误差将是这个填充停止的长度 - >"."


Ric*_*dOD 10

你应该把它映射到FLOAT(53) - 这就是LINQ to SQL的作用.


Eur*_*lli 8

float 在SQL Server中实际上[编辑:几乎]精度为"double"(在C#意义上).

float是...的同义词float(53).53是尾数的位.

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

  • 实际上,IIRC,.NET中的双重使用52位尾数和11位指数. (2认同)

Dav*_*rab 5

对于SQL Sever:

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

真正的答案是Float,我对十进制不正确.

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

虽然如果尝试使用int类型,decimal不会给出错误.

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