Sql server SQL Server中的C#Float到Real
我正在尝试使用实体框架,并有一个联系人数据库,其中包含来自谷歌地图的经度和纬度数据 指南上说这应该作为浮动存储 我已经创建了我的POCO实体,其中包括Sql server SQL Server中的C#Float到Real,sql-server,entity-framework-4.1,ef-code-first,Sql Server,Entity Framework 4.1,Ef Code First,我正在尝试使用实体框架,并有一个联系人数据库,其中包含来自谷歌地图的经度和纬度数据 指南上说这应该作为浮动存储 我已经创建了我的POCO实体,其中包括经度作为浮点和纬度作为浮点 我刚刚注意到,在数据库中,它们都显示为real 在我从谷歌获得任何数据之前,还有很多工作要做,我离测试还有很长的路要走,我只是想知道是否有人能告诉我这以后是否会成为一个问题?不,应该没问题。请注意,您可能无法获得与从Google Maps收到的完全相同的值,因为该值将以十进制格式的文本表示。然而,这实际上是一个物理量,因
经度
作为浮点
和纬度
作为浮点
我刚刚注意到,在数据库中,它们都显示为real
在我从谷歌获得任何数据之前,还有很多工作要做,我离测试还有很长的路要走,我只是想知道是否有人能告诉我这以后是否会成为一个问题?不,应该没问题。请注意,您可能无法获得与从Google Maps收到的完全相同的值,因为该值将以十进制格式的文本表示。然而,这实际上是一个物理量,因此作为浮点/双精度/实数/(您喜欢的任何二进制浮点类型)比作为十进制更合适。(小数更适用于人为数量,尤其是货币。) 如果你看一下,你会发现
real
实际上是float(24)
-一种32位浮点二进制点类型,就像C#中的float
编辑:如评论中所述,如果您想要的精度超过float
提供的7-8位有效数字,那么您可能需要double
而不是C#,这意味着SQL Server中的float(53)
。此链接:
说明在SQL Server中,real
是使用4字节数据的float(24)
的同义词。在.NET中,单精度浮点数也使用4个字节,因此这些字节相当于:
谢谢您的解释,但是,我只是手动将数据输入数据库,正如您所说,它没有存储准确的值。。。41.710855,-93.959198的随机位置存储为41.71085,-93.9592。。。我刚试着搜索了一下,发现这些位置大概有3/4英里远。。。这有点太远了:(…我猜这可能是不同语言对浮点的定义之间的差异?(我正试图从这个例子开始工作-…有解决办法吗?@wil:如果您想要超过7-8个有效数字,请在C#中使用
double
和float(53)
在数据库中。很抱歉,我没有意识到这会导致一个不同的问题,但是,谢谢。为什么EF不允许在浮点上设置精度,而允许十进制?如果属性是浮点,那么我就不能设置其精度。@stt106:如果您遵循文档,看起来只有两个精度值float/real
-对应于在C#中使用float
或double
。@Pranay-Rana-我没有回答我没有接受的答案!