Java Koordinaten trimmen

limoneneis

Cadet 4th Year
Registriert
Okt. 2009
Beiträge
72
Hallo,

ich versuche gerade Koordinaten zu trimmen, da ich die Genauigkeit eines Navigationssystems testen möchte.

Die Daten sehen in etwa so aus

Code:
(9.63292858891819|52.415214426435284) 
 (9.632917527876117|52.415233569630686) 
 (9.63295121531192|52.415218089863174) 
 (9.633005181162247|52.41522945449725) 
 (9.633010629369778|52.415220556048325)

Bei der x-Koordinate will ich die Koordinaten ab der 4. Nackommastelle betrachten. Danach soll der Wert drei Stellen haben und dann nur noch Nachkommastellen haben.

(9.63292858891819|52.415214426435284)
_____(928.58891819|____214.426435284)

Ich habe das mit folgenden Schnipsel versucht.


Code:
        for (int i = 0; i <= this.knotenliste.size() - 1; i++) {
            Position p = this.knotenliste.get(i).getP(); //holt Position aus der Knotenliste

            //alle Nachkommastellen eliminieren
            float akt1 = (float) (p.getLat() * Math.pow(10,nachkommastelle));
  
            //betrachtungsstellen < nachkommastelle
            //Ich bestimme hier wo das neue Komma sein soll
            float akt2 = (float) (akt1 / Math.pow(10,betrachtungsstellen));
            
            //Hier hacke ich die Nachkommastellen von akt3 ab
            long akt3 = (int) akt2;
            
  
          //Hier hacke ich Vorkommastellen ab
          akt1 %= akt3;
            
            //Rueckzuweisung zur Liste
            p.setLat(akt1);
            
        }


Das Problem was ich habe ist, dass je nachdem "betrachtungsstellen" oder "nachkommastellen" für einen Wert haben ganz schnell (NaN,NaN) herauskommt. Das ist echt ne Denksportaufgabe. Vlt hattet ihr ja mal ein ähnliches Problem.

Danke für jeden schonmal, der was postet!
 
Ich verstehe deine Frage kaum und hatte auch ewig kein Java mehr. Allerdings sollte dir hier Math.abs weiterhelfen.
PHP:
int n = 0
n = Math.abs(9.63292858891819 * 1000) // n = 9632
n = 9632 / 1000
n = 9.63292858891819 - n // n = 0.00092858891819
Dann müsstest du in einer Schleife solange n mit 10 multiplizieren bis n >= 100.

Ist das die Lösung deines Problems oder hab ich dich missverstanden?
 
Wie wärs damit:
Code:
double position = 9.63292858891819;
int nachkommastelle = 4;
int betrachtungsstellen = 3;

double result = position * Math.pow(10, nachkommastelle + betrachtungsstellen - 1);
result = result % Math.pow(10, betrachtungsstellen);

System.out.println(result); // 928.5889181904495

Die Logik, eine Genauigkeit zu prüfen indem man Zahlen vor dem Komma abschneidet (uns es dann noch genau 3 Vorkommastellen sein müssen), verstehe ich aber nicht so ganz. Ich glaube, dass Problem liegt schon ganz woanders.

Übrigens solltest du double benutzen, da dieser genauer ist.
 
Hi,

danke jetzt läuft es.

Der Sinn des ganzen ist, dass ich das Ergebnis in ein jFrame packe und der verarbeitet nur Integer. Deswegen brauche ich auch nur den dynamischen Teil der Zahenfolge.

Vielleicht ist das alles umständlich aber im Endeffekt habe ich das auf diesen Weg hinbekommen.

Thx!!!
 
Zurück
Oben