C#中的浮点型转换为SQL Server中的实数类型

3
我正在尝试使用Entity Framework,并且有一个包含来自Google Maps的经度和纬度数据的联系人数据库。
指南说应该将其存储为浮点数。
我已创建了POCO实体,其中包括经度(Longitude)和纬度(Latitude),类型均为浮点数。
我刚刚注意到,在数据库中,这两个字段都显示为real类型。
在我能从谷歌获取任何数据之前,还有很多工作要做,离测试还很远,我想知道是否会在后面出现问题?

@Pranay Rana - 我还没有采纳答案! - wil
2个回答

6
不,那应该没问题。请注意,您可能无法像从Google Maps收到的那样获得完全相同的值,因为那将以十进制格式的文本表示。但是,这实际上是一个物理量,因此更适合作为浮点数/双精度/实数(您喜欢的任何二进制浮点类型),而不是十进制数。(十进制数更适用于人造数量-特别是货币。)
如果您查看 floatreal的文档, 您将看到real实际上是float(24) - 32位浮点二进制点类型,就像C#中的float一样。
编辑:如评论中所述,如果您想要比float提供的7-8个有效数字更多的准确性,则在C#中可能需要使用double,这意味着在SQL Server中为float(53)

谢谢您的解释,但是我只是手动将数据输入到数据库中,正如您所说,它没有存储精确值...一个随机位置41.710855,-93.959198被存储为41.71085,-93.9592...我刚刚尝试进行搜索,这些位置似乎偏离了大约3/4英里...这有点太远了:(...我猜想这可能是不同语言定义浮点数的差异?(我试图从这个例子中工作-http://code.google.com/apis/maps/articles/phpsqlsearch.html)...有没有解决方法? - wil
@wil:如果你想要超过7-8个有效数字,可以在C#中使用double,在数据库中使用float(53) - Jon Skeet
抱歉,我没有意识到这会引起另一个问题,但是谢谢。 - wil
为什么 EF 不允许在 float 上设置精度,但允许在 decimal 上设置?如果一个属性是 float 类型,那么我就无法设置它的精度。 - dragonfly02
@stt106:嗯,如果你按照文档操作的话,似乎float/real的精度只有两个值 - 分别对应在C#中使用floatdouble - Jon Skeet

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接