Go Down

Topic: Umwandeln von float GPS Daten - 0er Stellen fallen weg ? (Read 156 times) previous topic - next topic

BullSimons

Hallo zusammen,

ich möchte mit GPS Daten auf einem LCD anzeigen. Im Prinzip tut alles solange ich nicht zu nahe an einem Längen oder Breitengrad bin.

Die aktuelle Position wäre zB

Latitude 49.436656
Longitude 8.000493

Als Float bekomme ich

Latitude 49.44
Longitude 8.00

Das Spalte ich dann auf in Vorkomma und Nachkommestellen. Danach bekomme ich als Nachkommestelle
Latitude 436656
Longitude 493

Die Formel von mir funktioniert, solange hinter dem Komma keine 0 kommt.
Wie löst man das Problem richtig?



lon = Longitude und kommt aus der TinyGSM Lib


g_String_GPS_Longitude_NK_LCD_soll = (long((lon - float(long(lon))) * 1000000));

Viele Grüße
Oliver

uwefed



Beim Print von Float kann man die Nachkommastellen angeben. aber Achtung: Float hat nur eine Genauigkeit von 6-7 significanten Stellen.

Da die Nachkommazahl immer auf 6 Stellen hat mußt Du bei der Darstellung soviele nullen vor der Zahl ausgeben bis Du wieder 6 stellen hast.
Grüße Uwe

agmue

Für sowas finde ich snprintf ganz praktisch, auch wenn %f nicht direkt funktioniert:

Code: [Select]
void setup()
{
  Serial.begin(9600);
  Serial.println("Anfang");
  float lat = 49.436656;
  float lon = 8.000493;
  Serial.print("Latitude\t");
  func(lat);
  Serial.print("Longitude\t");
  func(lon);
}

void loop() {}

void func(float wert)
{
  char buf[100];
  int vk = wert;
  unsigned long nk = (abs(wert) - float(long(abs(wert)))) * 1000000UL;
  snprintf(buf, sizeof(buf), "Wert = %d.%06lu", vk, nk);
  Serial.println(buf);
}

Quelle

BullSimons

Danke für die Antworten.

Problem konnte ich noch fast selbst lösen - es fehlten nur die richtigen Suchbegriffe bei Google (führende Null zB). Ich hatte es aber nicht mehr an einen Rechner geschafft um die Frage zu schließen...

dtostrf hat das Problem dann perfekt behoben :)


Ein Glück ist das jetzt aufgefallen und nicht wenn alles schon fest eingebaut ist :D

Viele Grüße
Oliver


Go Up