2012-03-27 5 views
2

Ich versuche derzeit, einen Breiten- und Längengradwert von einem Ort abzurufen. Wenn ich die Lage auf ganzzahlige Werte mit dem folgenden Code konvertieren:Wie wird in Java ein Doppel auf zwei Dezimalstellen gerundet?

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();     
     } 

es im Format von 0,000000

lat is 5.494394 
long is -7.724457 

kommt zurück, wie kann ich es wieder im Format 00,000000

I habe DecimalFormat, Math.Round und verschiedene andere Lösungen ausprobiert, die ich auf Stack Overflow gefunden habe, aber immernoch das gleiche Ergebnis bekommen. Bitte helfen Sie!

+0

Möchten Sie es im Format 00.000000 in einem String dann zeigen? –

+0

nein ich brauche den Wert als Integer oder Double. Der Wert von lat sollte 54.94394 sein – devinefergal

+0

Warten Sie dann ein anderes Problem. lat ist 5.494394, aber Sie wollen es 54.94394 werden? Dann nur "lat * = 10" –

Antwort

4

Haben Sie versucht:

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

EDIT

Basierend auf dem neuen Frage, warum Sie dies nicht tun:

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); 
+0

aber ich brauche 54.94394 statt 05.494394 wie bekomme ich das? – devinefergal

+0

Ich benötige meinen Latitude-Wert, daher ist 05.494394 nicht relevant. Wenn ich eine 0 von dieser Methode entferne, bekomme ich zurück 5.494394 Der Wert, den ich benötige, ist 54.94394 – devinefergal

+0

Vielen Dank @assylias Weißt du, wie ich die Ausgabe von location.getLatitude() runden kann; Meine Ausgabe in der Minute ist 54.95229833333333 – devinefergal

2

In Zeichenfolge konvertieren, führende Null hinzufügen. StringFormatter könnte helfen. Eine ganze Zahl wird niemals führende Nullen haben.

+0

Ich habe versucht, zu einem Doppel wie folgt zu konvertieren: lat = (double) lat; Aber ich brauche den Wert als eine ganze Zahl oder doppelt, wie ich es verwenden werde, um Abstand zwischen dem Standort und einem anderen Punkt zu erhalten. – devinefergal

1

Sie tun, um eine Verwirrung zwischen " Echtdaten "und" Darstellung "

5. 494394 sind die "echten Daten", das ist eine ganze Zahl unter 10, es ist logisch, keine Dekade zu haben, wenn man sie direkt anzeigt.

Ich möchte jedes Mal die Dekade anzeigen, auch dort ist gleich 0, müssen Sie testen, ob Ihre Ganzzahl schlechter als 10 sind nicht.

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

mit dieser Funktion sind Sie immer das Jahrzehnt vor den „echten Daten“ angezeigt: mit einem Atomtest, dies kann mit dieser Art und Weise in Java erfolgen.

1
public String formatFigureToTwoPlaces(double value) { 
    DecimalFormat myFormatter = new DecimalFormat("00.00"); 
    return myFormatter.format(value); 
}