2014-10-27 81 views
-2
import java.util.Scanner; 

public class clockwise { 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     System.out.println("Please enter the coordinates in a clowise order"); 
     System.out.println("Enter the GPS coordinates for the 1st city: "); 
     double coordinateX1 = input.nextDouble(); 
     double coordinateY1 = input.nextDouble(); 

     System.out.println("Enter the GPS coordinates for the 2nd city: "); 
     double coordinateX2 = input.nextDouble(); 
     double coordinateY2 = input.nextDouble(); 

     System.out.println("Enter the GPS coordinates for the 3rd city: "); 
     double coordinateX3 = input.nextDouble(); 
     double coordinateY3 = input.nextDouble(); 

     System.out.println("Enter the GPS coordinates for the 4th city: "); 
     double coordinateX4 = input.nextDouble(); 
     double coordinateY4 = input.nextDouble(); 
     // 
     double earthRadius = 6371.01; 

     // Get distance 

     // distance=(radius)arccos(sin(x1)sin(x2)+cos(x1)cos(x2)cos(y1−y2)) 
     // ****************************************************************************1 
     // 1 35.2270869 -80.8431267 
     double distance1 = (earthRadius) 
       * Math.acos(Math.sin(coordinateX1) * Math.sin(coordinateX2)) 
       + Math.cos(coordinateX1) * Math.cos(coordinateX2) 
       * Math.cos(coordinateY1 - coordinateY2); 

     System.out.println("distance1: "+distance1); 
     // 2 35.2270869 -80.8431267 
     double distance2 = 
       (earthRadius) 
       * Math.acos(Math.sin(coordinateX2) * Math.sin(coordinateX4)) 
       + Math.cos(coordinateX2) * Math.cos(coordinateX4) 
       * Math.cos(coordinateY2 - coordinateY4); 

     System.out.println("distance2: "+distance2); 

     // 3 28.5383355 -81.3792365 
     double distance3 = (earthRadius) 
       * Math.acos(Math.sin(coordinateX4) * Math.sin(coordinateX1)) 
       + Math.cos(coordinateX4) * Math.cos(coordinateX1) 
       * Math.cos(coordinateY4 - coordinateY1); 
     System.out.println("distance3: "+distance3); 

     // ******************************************************************************2 
     // 4 33.7489954 -84.3879824 

     // 1 35.2270869 -80.8431267 
     double distance01 = (earthRadius) 
       * Math.acos(Math.sin(coordinateX2) * Math.sin(coordinateX3)) 
       + Math.cos(coordinateX2) * Math.cos(coordinateX3) 
       * Math.cos(coordinateY2 - coordinateY3); 

     // System.out.println("distance: "+distance01); 
     // 2 32.0835407 -81.0998342 
     double distance02 = (earthRadius) 
       * Math.acos(Math.sin(coordinateX3) * Math.sin(coordinateX4)) 
       + Math.cos(coordinateX3) * Math.cos(coordinateX4) 
       * Math.cos(coordinateY3 - coordinateY4); 

     //System.out.println("distance: "+distance02); 

     // 3 28.5383355 -81.3792365 
     double distance03 = 
       (earthRadius) 
       * Math.acos(Math.sin(coordinateX4) * Math.sin(coordinateX2)) 
       + Math.cos(coordinateX4) * Math.cos(coordinateX2) 
       * Math.cos(coordinateY4 - coordinateY2); 
     // System.out.println("distance: "+distance03); 

     double rodistance1 = Math.ceil(distance1); 
     double rodistance2 = Math.ceil(distance1); 
     double rodistance3 = Math.ceil(distance3); 
     double rodistance01 = Math.ceil(distance01); 
     double rodistance02 = Math.ceil(distance02); 
     double rodistance03 = Math.ceil(distance03); 

     double s1 = (rodistance1 + rodistance2 + rodistance3)/2; 

     double s2 = (rodistance01 + rodistance02 + rodistance03)/2; 

     double area1 = Math.sqrt(s1 * (s1 - rodistance1) * (s1 - rodistance2) 
       * (s1 - rodistance3)); 
     double area2 = Math.sqrt(s2 * (s2 - rodistance01) * (s2 - rodistance02) 
       * (s2 - rodistance03)); 

     double totalArea = Math.ceil(area1 + area2); 

     System.out.println("The area is: " + totalArea); 

    } 
} 


//SAMPLE 
//Please enter the coordinates in a clockwise order. 
//Enter the GPS coordinates for the 1st city: 35.2270869 -80.8431267 
//Enter the GPS coordinates for the 2nd city: 32.0835407 -81.0998342 
//Enter the GPS coordinates for the 3rd city: 28.5383355 -81.3792365 
//Enter the GPS coordinates for the 4th city: 33.7489954 -84.3879824 
//The area is: 117863.342 

我得到1.06664794E8我能做些什麼來得到答案作爲示例?除非我的公式出現錯誤,否則我應該得到一個好的答案。我使用Math.ceil()它可能不是我真正想要的,我需要舍入到3位小數........................... ......................................遇到四捨五入的問題

回答

0

您可以在這裏使用BigDecimal

double val = 1.06664794E8; 
BigDecimal bigDecimal = new BigDecimal(val); 
System.out.println(bigDecimal); 

輸出地說:

106664794 
+0

哦,我明白了,我花了幾個小時來解決這個問題。我不知道爲什麼我得到這麼大的數字。 – 2014-10-27 07:47:12

+0

我需要得到117863.342作爲我的答案 – 2014-10-27 08:02:50

1

使用BigDecimal和setScale()

BigDecimal bg1 = new BigDecimal("1.06664794E8"); 
    // set scale of bg1 to 3 and using CEILING as rounding mode 
    bg1 = bg1.setScale(3, RoundingMode.CEILING); 
    System.out.println("After changing the scale to 3 and rounding is "+bg1); 

輸出:將刻度更改爲3後舍入爲106664794.000