"double" 在SQL Server中代表什么?
"double" 在SQL Server中代表什么?
我在C#
中有一些属性是double
类型的,我想将它们存储在SQL Server的表中,但发现没有double
类型,那么使用decimal
还是float
更好呢?
这将存储纬度和经度值,所以我需要最准确的精度。
谢谢目前收到的回复。
另外,在这里有一个关于SQL-CLR类型映射的好回答,附有一个有用的图表:https://stackoverflow.com/a/1440631/1442157
根据那篇帖子(由David发表):
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个小数位比附带许多无意义的数字要好得多。