Присвоение форматированного значения переменной
Посмотрите на этот фрагмент кода (из библиотеки TinyGPS++):
Serial.print(gps.location.lat(), 6);
Он печатает широту с точностью до 6 десятичных знаков. Я хочу, чтобы вместо того, чтобы печатать это значение, присвоить его переменной.
Но я хочу, чтобы оно было назначено так же, как указано выше, с шестью десятичными знаками. Есть ли способ сделать это?
@user1584421, 👍0
Обсуждение2 ответа
Лучший ответ:
Просто расширяя то, что сказал КоннорВульф (которое я видел вчера), посмотрите на ссылку, которую он вам дал, она дает вам представление о команде, которая вам нужна.
Функция dtostrf() возвращает указатель на преобразованную строку s.
char* dtostrf ( двойной __val, подписанный символ __width, беззнаковый символ __prec, символ * __s )
Функция dtostrf() преобразует значение double, переданное в val, в представление ASCII, которое будет сохранено в папке s. Вызывающая сторона несет ответственность за предоставление достаточного объема памяти в s.Конвертация осуществляется в формат «[-]д.ддд». Минимальная ширина поля выходной строки (включая «.» и возможный знак для отрицательных значений) задается в виде ширины, а prec определяет количество цифр после десятичного знака. ширина – это значение со знаком, отрицательное для регулировки по левому краю.
Исходя из этого, я написал короткий набросок, который делит millis()
на 1000 и сохраняет это значение в виде числа с плавающей запятой. Затем мы используем это число с плавающей запятой в качестве источника для dtostrf()
, чтобы выполнить свою работу и сохранить результат в массиве символов.
void setup(){
Serial.begin(9600);
}
void loop(){
char c[12];
float f = millis()/1000.0;
dtostrf(f,11,3,c);
Serial.println(c);
delay(111);
}
Я выбрал произвольные значения, вам придется выполнить вычисления по размеру создаваемого массива (не забудьте ведущий отрицательный знак, цифры перед десятичной запятой, десятичную дробь и цифры точности а также нулевой терминатор!
У меня была такая же проблема, и я нашел ответ
char latitude[20];
char longitude[20];
dtostrf(gps.location.lat(),8,6,latitude);
dtostrf(gps.location.lng(),8,6,longitude);
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Преобразование long в массив символов и обратно
- контент» не захватывается
- Получение имени перечисления из экземпляра перечисления
- Некоторые переменные не сохраняют свои значения при выходе из цикла while?
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
Похоже, вам нужен
dtostrf()
- http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42 Он должен делать то, что вы хотите (однако вам придется предварительно выделить строку)., @Connor WolfЧтобы внести ясность: хотите ли вы сохранить строку с 6 знаками после запятой или значение с плавающей запятой, округленное до 6 знаков после запятой?, @BrettAM
Как бы то ни было, но, думаю, веревка мне больше подойдет, @user1584421
Какие исследования вы провели по этому поводу? @ConnorWolf дал вам комментарий с обоснованным предложением, вы его рассмотрели?, @Madivad