我在C#
中有几个属性,它们是double
,我想将它们存储在SQL Server的表中,但是注意到没有double
类型,那么,最好使用decimal
或float
吗?
这将存储纬度和经度值,因此我需要最精确的精度。
感谢到目前为止的答复。
最佳答案
float
或者,如果您想去老学校:
real
您也可以使用float(53),但这与float含义相同。
(“真实”等效于float(24),而不是float/float(53)。)
十进制(x,y) SQL Server类型用于需要确切的十进制数字而不是浮点数(可以是近似值)的情况。这与C#“十进制”数据类型相反,后者更像是128位浮点数。
MSSQL的 float 类型等效于.NET中的64位双类型。 (我在2011年的原始答案表示尾数可能会略有不同,但是我在2020年进行了测试,它们在非常小的数字和非常大的二进制表示中似乎都100%兼容-请参阅https://dotnetfiddle.net/wLX5Ox测试)。
为了使事情更加困惑,C#中的“浮点数”只有32位,因此在SQL中它与MSSQL中的real/float(24)类型等效于与float/float(53)比较。
在您的特定用例中...
您所需要的只是小数点后5位,以表示大约一米的精度内的纬度和经度,并且度数的小数点前最多只需要三位数字。浮点数(24)或十进制(8,5)最适合您在MSSQL中的需求,并且在C#中使用浮点数就足够了,您不需要加倍。实际上,您的用户可能会感谢您舍入到小数点后5位,而不是一堆无关紧要的数字。