Как округлить от двух до двух знаков после запятой в Java? - PullRequest
2 голосов
/ 27 марта 2012

В настоящее время я пытаюсь получить значение широты и долготы из местоположения.Когда я конвертирую местоположение в целочисленные значения, используя следующий код:

    LocationManager locMan;
    Location location;
    String towers;
    private static double lat;
    private static double lon;

    locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);          
    Criteria crit = new Criteria();

    towers = locMan.getBestProvider(crit, false);
    location = locMan.getLastKnownLocation(towers);                 

        if (location != null)
        {                   

            lat = (int) (location.getLatitude() * 1E6);
            lon = (int) (location.getLongitude() * 1E6);
            GeoPoint ourLocation = new GeoPoint(lati, longi);
            OverlayItem overlayItem = new OverlayItem(ourLocation, "1st String", "2nd String");
            CustomPinpoint custom = new CustomPinpoint(d, MainMap.this);
            custom.insertPinpoint(overlayItem);
            overlayList.add(custom);
            overlayList.clear();    

            lat = (double) lat;             
            lon = (double) lon; 

            System.out.println("Lat is  " + lat);
            System.out.println("Longi is  " + lon);
        }
        else
        {
            System.out.println("Location is null! " + towers);
            Toast.makeText(MainMap.this, "Couldn't get provider", Toast.LENGTH_SHORT).show();                   
        }

, оно возвращается в формате 0,000000

lat is 5.494394
long is -7.724457

, как я могу получить его обратно в формате 00.000000

Я пробовал DecimalFormat, Math.Round и другие решения, которые я нашел в Stack Overflow, но все равно получаю тот же результат.Пожалуйста помоги!

Ответы [ 4 ]

4 голосов
/ 27 марта 2012

Вы пробовали это:

DecimalFormat sf = new DecimalFormat("00.000000");
String s = sf.format(5.494394);
System.out.println(s); //prints 05.494394

РЕДАКТИРОВАТЬ

На основании вашего нового вопроса, почему бы вам не сделать это:

double latitude = location.getLatitude();
double longitude = location.getLongitude();
GeoPoint ourLocation = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));
//....
System.out.println("Lat is  " + latitude);
System.out.println("Longi is  " + longitude);
2 голосов
/ 27 марта 2012

Преобразовать в строку, добавить ведущий ноль.StringFormatter может помочь.Целое число никогда не будет иметь ведущих нулей.

1 голос
/ 27 марта 2012
public String formatFigureToTwoPlaces(double value) {
    DecimalFormat myFormatter = new DecimalFormat("00.00");
    return myFormatter.format(value);
}
1 голос
/ 27 марта 2012

Вы путаете между «реальными данными» и «представлением»

5.494394 - это «реальные данные», то есть целое число уступает 10, логично, что у вас не было десятилетия, когда вы отображаете их напрямую.

Если вы хотите отображать каждый раз, когда десятилетие также там равно 0, вы должны проверить, если ваше целое число уступает 10, нет.С помощью атомарного теста это можно сделать следующим образом в java:

(lat < 10) ? "0"+lat : lat;

с помощью этой функции вы всегда будете отображать декаду перед «реальными данными».

...