Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算两个坐标之间的距离_Java_Coordinates - Fatal编程技术网

Java 计算两个坐标之间的距离

Java 计算两个坐标之间的距离,java,coordinates,Java,Coordinates,这里的坐标相同,所以我希望它返回零距离。但他们使用下面提到的计算公式返回到距离以下 Coordinate 1 : 44.000, 61.001 Coordinate 2 : 44.000, 61.001 Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283) Coordinate 1 : 110.000, 89.001 Coordinate 2 : 110.000, 89.

这里的坐标相同,所以我希望它返回零距离。但他们使用下面提到的计算公式返回到距离以下

Coordinate 1 : 44.000, 61.001
Coordinate 2 : 44.000, 61.001
Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283)

Coordinate 1 : 110.000, 89.001
Coordinate 2 : 110.000, 89.001
这里的坐标是相同的,所以我希望它将返回
距离。但他们使用下面提到的计算公式返回到距离以下

Coordinate 1 : 44.000, 61.001
Coordinate 2 : 44.000, 61.001
Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283)

Coordinate 1 : 110.000, 89.001
Coordinate 2 : 110.000, 89.001
为了计算距离,我使用了以下代码:

Distance between two coordinates : 1.5033016609322658E-7 (Means 0.00000015033016609322658)
为什么上面的公式返回距离的类型而不是0

注:所有坐标值均为双精度


看起来您在显示坐标时将坐标值舍入到小数点后3位。实际存储的坐标不一样,这是因为在计算它们时,无论使用什么数学方法,都存在一些微小的浮点累积不精确性。因为在显示时没有舍入距离,所以可以看到差异

注意:为了代码的整洁,您应该将距离计算包装到
坐标
类上的方法中。而且也很有用:

Math.sqrt(Math.pow(coordinate2.getX() - coordinate1.getX(), 2) + Math.pow(coordinate2.getY() - coordinate1.getY(), 2))

我建议使用
int
。e、 g.44.001将变为44001,即表示小数,因此没有小数部分。使用您的公式计算距离,并将ans乘以10的适当幂。例如这里,10^[-3]

这将避免与浮动相关的错误


注意。如果整数表示法创建了非常大的no.s,请考虑使用java
biginger
类。

避免
BigDecimal
的一种方法是使用整数表示法

如果您的小数永远不会超过第三个小数位数,则可以通过乘以1000将坐标转换为整数表示形式。 这样,您的计算不会失去精度

在返回任何值之前,需要将其重新转换为正确的单位。 此逻辑应封装在
坐标
类中。

两件事: 1.如前所述,最好使用BigDecimal来计算距离。
2.要计算到坐标之间的距离,必须考虑到它们在球体上,而不是在平面上

这个公式似乎是正确的。您是否在使用双倍密码?可能使用BigDecimal。读取浮点精度,尝试使用
BigDecimal
而不是
double
float
。这将消除或至少减少精度问题。如何获得这些值?通过减去相同的经度和纬度,您应该得到一个圆0。@Bifz“0.0000000 835023079283”是“大约0”,这取决于您对“大约”的定义。。。