我在c#中有一对双属性,我想在SQL Server中存储这些表,但注意到没有双类型,所以最好使用什么,十进制或浮点数?

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

谢谢你的回复。


当前回答

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

其他回答

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

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

. net双使用54位作为尾数。

听起来你可以挑挑拣拣。如果你选择浮点数,你可能会损失11位精度。如果这是可以接受的,那就去做吧——显然Linq设计师认为这是一个很好的权衡。

但是,如果应用程序需要这些额外的数字,则使用decimal。Decimal(正确实现)比float(浮点数)准确得多——没有从10进制到2进制再返回的混乱转换。

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

Float在SQL server中表示double。你可以在visual studio的c#代码中找到一个证明。在这里,我已经在SQL server和c#中声明了一个Float。这样我就能皈依

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

这里的OverTime被声明为float类型

另外,这里有一个关于SQL-CLR类型映射的很好的答案,其中有一个有用的图表。

从那篇文章(大卫):