我在C#中有几个属性,它们是double,我想将它们存储在SQL Server的表中,但是注意到没有double类型,那么,最好使用decimalfloat吗?

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

感谢到目前为止的答复。

最佳答案

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位,而不是一堆无关紧要的数字。

10-07 19:44
查看更多