本问题已经有最佳答案,请猛点这里访问。
我在服务器端(JAVA平台)存储纬度和经度。
为了存储这些值,我在服务器端使用了float和double数据类型。 我知道,不建议使用float和double原始数据类型(不建议以专业方式使用货币),因为float和double存在舍入精度问题。
就我而言,我只是比较服务器端存储的坐标(纬度和经度)。
问题1:
将坐标与数据类型(浮点型或双精度型)进行比较,将来会出现问题吗?
问题2:
用大十进制好吗? 还是使用float或double更为安全?
小数点后六位(浮点数的最大精度)就足够了。 见gis.stackexchange.com/a/8674
@JarrodRoberson这个问题是关于Java的,另一个问题是关于MySQL的。 那么这个问题怎么可以重复?
您应该从所需的精度开始。确定后,就可以选择合适的数据类型。
如果确定5个小数位(1.1132 m)的精度就足够了,则可以轻松地使用float。计算需要越精确,您就越倾向于使用double并最终使用BigDecimal。
比较浮点数时,还应考虑必要的精度。
为此答案+1。检查此链接以了解所需的精度en.wikipedia.org/wiki/
1纬度或经度约为111公里。另外:double l = -179.123456789; System.out.println((float)f);打印:-179.15346,则仅当使用float(4字节)编码时,才可以估计1m左右的精度。
这不是安全问题,而是精度问题。
我不会考虑花车,但我认为双打是理想的选择。
您只需要查看双精度数中最精确的值,然后查看它是否适合常规的经度/纬度值。我认为这已经足够了。
其他BigDecimal只是问题的简单后门,如果您想提高精度,请使用它
出于好奇,想知道double可以处理多少精度。根据我的观察,它可以处理14位精度(就我而言)。所以我认为这对我有好处。如果double可以处理20位以上的数字,double将是我的应用程序的理想选择。请你的建议。
根据所使用的Java,双基元数据类型的长度为64位,正弦值当然为1位,等等。您可以在此处找到有关精度的信息:docs.oracle.com/javase/specs/jls/ SE7 / HTML / JLS-4.html#JLS-4.2.3
非常感谢您的宝贵指导。
您无需对经度或纬度值进行任何取整,因此请使用任意一个。 Double更为精确,因此,让它成为您决策中最重要的因素。
您的长期/经度值需要多少精度?
为了精确定位地图,您可能需要查看大十进制,但是对于模糊的值,float就足够了。
它可能需要20位数字。但是不根据我的观察,情况就是这样。当然,我不做任何舍入运算。我只是在检查以下条件if((swLat <=纬度)&&(swLng <=经度)&&(neLat> =纬度)&&(neLng> =经度))...如果我用double实现,则条件为工作正常。但是害怕使用它,因为我需要准确性。使用Double是适合我的情况的理想选择?