有舍入数字的问题

时间:2014-10-27 07:33:16

标签: java

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位小数........................... ......................................

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以在此使用BigDecimal

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

Out put:

106664794
相关问题