"double" 在SQL Server中代表什么?

16 浏览
0 Comments

"double" 在SQL Server中代表什么?

我在C#中有一些属性是double类型的,我想将它们存储在SQL Server的表中,但发现没有double类型,那么使用decimal还是float更好呢?

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

谢谢目前收到的回复。

admin 更改状态以发布 2023年5月23日
0
0 Comments

另外,在这里有一个关于SQL-CLR类型映射的好回答,附有一个有用的图表:https://stackoverflow.com/a/1440631/1442157

根据那篇帖子(由David发表):

enter image description here

0
0 Comments

float

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

real

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

(“real”等同于float(24),而不是float/float(53)。)

SQL Server的decimal(x,y)类型是用于精确小数而不是浮点数(可以是近似值)。

这与C#的“decimal”数据类型相反,后者更像是128位浮点数。

MSSQL的float类型等同于.NET中的64位double类型。(我最初的2011年的答案说可以有少许甚至没有差异,但我在2020年进行了测试,它们在二进制表示法方面似乎是100%兼容的,无论是对于非常小或非常大的数字--查看https://dotnetfiddle.net/wLX5Ox以获取我的测试)。

更令人困惑的是,C#中的“float”仅有32位,因此在SQL中,它会更等同于MSSQL中的real/float(24)类型,而不是float/float(53)。

在你的具体用例中...你只需要5位小数来表示经纬度,以达到约1米的精度,而且在度数之前,你只需要最多三位数字。在MSSQL中,Float(24)或decimal(8,5)将最适合您的需求,并且在C#中使用float足够了,你不需要double。事实上,你的用户可能会感谢你,因为四舍五入到5个小数位比附带许多无意义的数字要好得多。

0