我在c#中有一对双属性,我想在SQL Server中存储这些表,但注意到没有双类型,所以最好使用什么,十进制或浮点数?
这将存储纬度和经度值,因此我需要最精确的精度。
谢谢你的回复。
我在c#中有一对双属性,我想在SQL Server中存储这些表,但注意到没有双类型,所以最好使用什么,十进制或浮点数?
这将存储纬度和经度值,因此我需要最精确的精度。
谢谢你的回复。
当前回答
对于SQL Sever:
十进制类型是128位有符号的数字 Float是一个64位有符号数。
真正的答案是浮点数,小数我说错了。
原因是如果你使用小数,你将永远不会填满十进制类型的64位。
尽管如果你尝试使用int类型,decimal不会给你一个错误。
这里有一个很好的类型参考图表。
其他回答
SQL Server中的float实际上具有[编辑:几乎]“double”的精度(在c#的意义上)。
Float是Float(53)的同义词。53是尾数的位数。
. net双使用54位作为尾数。
你应该把它映射到FLOAT(53)——这就是LINQ to SQL所做的。
听起来你可以挑挑拣拣。如果你选择浮点数,你可能会损失11位精度。如果这是可以接受的,那就去做吧——显然Linq设计师认为这是一个很好的权衡。
但是,如果应用程序需要这些额外的数字,则使用decimal。Decimal(正确实现)比float(浮点数)准确得多——没有从10进制到2进制再返回的混乱转换。
Float是最接近的对等物。
SqlDbType枚举
对于Lat/Long,如OP所述。
1米是纬度的四万分之一,1秒大约是30米。Float/double可以得到15个有效数字。用一些快速而狡猾的心算…舍入/近似误差将是这个填充停止的长度-> "。
对于SQL Sever:
十进制类型是128位有符号的数字 Float是一个64位有符号数。
真正的答案是浮点数,小数我说错了。
原因是如果你使用小数,你将永远不会填满十进制类型的64位。
尽管如果你尝试使用int类型,decimal不会给你一个错误。
这里有一个很好的类型参考图表。