Как объединить две координаты 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
@adrianTNT, 👍0
Обсуждение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
- Не удается получить данные от GPS SD Shield V2-B
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- GPS-модуль uBlox Neo 6M не отвечает
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Как преобразовать строку в массив байтов
- Печать массива байтов на экране последовательного монитора Arduino IDE
- Проблемы с преобразованием byte[] в String
ваш вопрос не имеет ничего общего с 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