在sql server中什么代表double ?

我在C#中有两个属性,它们是double,我想在SQL Server中存储这些属性,但注意到没有double类型,所以最好使用什么,decimalfloat?

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

谢谢你的回复。

455055 次浏览
float

或者如果你想走老派路线:

real

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

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

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

MSSQL的浮动类型相当于。net中的64位类型。(我从2011年的原始答案说,尾数可能会有轻微的差异,但我已经在2020年测试了这一点,他们似乎是100%兼容的二进制表示非常小和非常大的数字-见https://dotnetfiddle.net/wLX5Ox我的测试)。

更让人困惑的是,c#中的“float”只有32位,所以它在SQL中更相当于MSSQL中的real/float(24)类型,而不是float/float(53)。

在你的特定用例中… 您只需要在小数点后5位表示纬度和经度,精度在1米以内,并且您只需要在小数点前3位表示度数。浮点数(24)或十进制数(8,5)在MSSQL中最适合你的需求,在c#中使用浮点数就足够了,你不需要double。事实上,您的用户可能会感谢您四舍五入到小数点后5位,而不是有一堆无关紧要的数字

对于SQL Sever:

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

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

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

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

在这里是一个很好的类型参考表。

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

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

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

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

Float是最接近的对等物。

SqlDbType Enumeration . bb0 SqlDbType枚举

对于Lat/Long,如OP所述。

1米是纬度的四万分之一,1秒大约是30米。Float/double可以得到15个有效数字。用一些快速而狡猾的心算…舍入/近似误差将是这个填充停止的长度-> "。

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

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

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

From the post (by 大卫): enter image description here

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

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

这里OverTime被声明为float type