2017-04-02 65 views
-2
存储开方

我计算两个数的欧氏距离,我有这样的公式:在BigDecimal的

import java.lang.*; 
import static java.lang.Math.pow; 
import static java.lang.Math.sqrt; 

public static void main(String[] args) 
{    
      double x2 = 0.32061253; 
      double x1 = 0.25090585; 
      double y2 = 0.33407547; 
      double y1 = 0.30716705; 

      double distance = sqrt(pow(x2 - x1,2) + pow(y2 - y1,2)); 
      System.out.println(distance); 
} 

当我试图把它保存在一个双变量(欧几里得距离),我得到0.0当我打印它(可能是因为数字有很多小数)。我尝试使用BigDecimal格式保存它,但它似乎不工作。在这种情况下,我如何正确使用它,因为sqrt会返回一个双精度?

+3

发布您的代码,您的输入,您的预期输出,您的实际输出。 –

+0

期望的输出是0.30104542160445247,实际输出是0.0。代码与我发布的代码非常相似,x2 x1 y2 y1都是双精度(它们都有10位小数:1.4666362219) – user1823812

+1

该帖子不是有效的Java代码,并且没有输入的输出无助于此。发布代码,输入和输出真的很复杂吗? –

回答

1

这段代码打印出一个答案,但不是在评论中提供的一个,它不打印“0.0”要么 - JDK 1.8

import java.lang.*; 

import static java.lang.Math.pow; 
import static java.lang.Math.sqrt; 

public class Main { 

    public static void main(String[] args) { 
     double x2 = 0.32061253; 
     double x1 = 0.25090585; 
     double y2 = 0.33407547; 
     double y1 = 0.30716705; 

     double distance = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); 
     System.out.println(distance); 
    } 
} 

//result 
//0.0747200395042642 

与毕达哥拉斯三重3,4还测试,5:

  • (X2-X1)= 3,
  • (Y2-Y1)= 4
  • 输出:5
+0

看公式https://en.wikipedia.org/wiki/Euclidean_distance的维基百科,这是该公式的正确java实现。 – bhspencer