2017-04-02 66 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