Как объединить две координаты GPS без потери десятичных знаков

Я хочу взять координаты GPS, такие как 42.1234 на 22.1234, и объединить их в виде строки с символом-разделителем:

42,1234 x 22,1234

Но используя этот код:

gps_string = (String)gps.location.lat()+' x '+(String)gps.location.lng();

Я теряю последние десятичные дроби и получаю:

42,12 x 22,12

Единственный способ увидеть полные координаты — указать дополнительный параметр для println, например:

Serial.println(gps.location.lat(), 6);

Как создать строку, содержащую обе координаты, без потери десятичных знаков? например 42,1234 x 22,1234

, 👍0

Обсуждение

ваш вопрос не имеет ничего общего с GPS ... это вопрос о преобразовании числа с плавающей запятой в строку без потери точности, @jsotola

Следует отметить, что модуль GPS, вероятно, выводит текст, а не числа с плавающей запятой., @jsotola

Какой у вас модуль GPS? Какую библиотеку GPS вы используете?, @Dougie

@ Дуги Я могу проверить, когда вернусь к компьютеру, но, как сказал jsotola, это проблема преобразования чисел с плавающей запятой, на самом деле не специфичная для этого GPS, а для Arduino., @adrianTNT

Попробуйте использовать dtostrf(val, 4, 6, buff); вместо того, чтобы приводить значение к строке., @Dougie

CStringBuilder из моей StreamLib позволяет создавать строку C (массив символов, оканчивающийся на 0) с теми же функциями, которые вы используете в Serial, @Juraj

@jsotola: модуль GPS, вероятно, выводит текст в формате NMEA с градусами, минутами и десятичными знаками минут. Так что вам все равно придется конвертировать это., @Nyos


1 ответ


Лучший ответ:

1

Если вам нужны 4 знака после запятой, вы можете попробовать что-то вроде этого:

gps_string = String(gps.location.lat(), 4)
           + " x "
           + String(gps.location.lng(), 4);
,

https://forum.arduino.cc/index.php?topic=243660.0 предлагает избегать функций Strings и String(). Используйте dtostrf(val, 4, 6, buff);, @Dougie

Этот работает очень хорошо (просто). Если я смогу немного упростить код, я опубликую ответ, используя dtostrf. Я понимаю, что метод dtostrf предназначен для соображений памяти/производительности., @adrianTNT