Float печатается только 2 десятичных знака после запятой
Раньше была похожая тема, но она не решила мою проблему. У меня возникла проблема с отправкой данных GPS, которые являются плавающими, и я не мог получить плавающие данные с тем же количеством значащих цифр, что и отправлял. Я всегда получал число с 2 цифрами после запятой. Поэтому я начал отладку и написал этот простой код только для того, чтобы проверить, работают ли числа с плавающей запятой так, как задумано:
#include <SoftwareSerial.h>
void setup() {
Serial.begin(9600);
}
void loop() {
float number1;
number1=1.45436;
Serial.print(number1);
delay(200);
}
И серийный монитор показал 1,45 в качестве вывода. Как увеличить точность числа с плавающей запятой, которое я сохраняю в памяти?
@Anthropomorphous Dodecahedron, 👍9
Обсуждение3 ответа
Лучший ответ:
По умолчанию функция серийной печати показывает только 2 десятичных знака, однако я уверен, что число с плавающей запятой имеет полное (неокругленное) значение, даже если оно не отображается.
Вы можете прочитать об этом в официальной документации здесь
С помощью следующего кода вы можете использовать больше десятичных знаков (фрагмент из официальной документации):
-Serial.println(1.23456, 0) gives "1"
-Serial.println(1.23456, 2) gives "1.23"
-Serial.println(1.23456, 4) gives "1.2346"
Также, вероятно, поможет следующая ссылка (PrintFloat):
PrintFloat
Примерно он работает, перебирая цифры и печатая их.
«Плавающие» числа Arduino *не* особенно точны. Они имеют 6-7 значащих цифр, считая те, что стоят по обе стороны от запятой. Для более высокой точности можно использовать «двойник»., @Chris Stratton
Также обратите внимание, что Arduino не очень хорош (т.е. быстр) с числами с плавающей запятой/удвоениями., @Michel Keijzers
@ChrisStratton Что касается комментария о более высокой точности: на Arduino двойное число - это просто еще одно название для float. См.: https://www.arduino.cc/reference/en/language/variables/data-types/float/ «В отличие от других платформ, где вы можете получить большую точность, используя двойное число (например, до 15 цифр), на в Arduino двойное значение имеет тот же размер, что и число с плавающей запятой»., @statueuphemism
Также String()
будет делать то же самое. Он принимает второй аргумент, поэтому, если число является «плавающим» или «двойным»: «String (floatVariable, 3)» дает вам «1,234»., @Andrew
Умножьте число с плавающей запятой на 10000 (или любое другое число по вашему желанию), отправьте его как целое число и преобразуйте полученное целое число обратно в число с плавающей запятой.
В качестве альтернативы измените библиотеку или напишите свою собственную.
Вы имеете в виду изменить серийную библиотеку? Кроме того, это то, что я делаю (умножаю на что-то и т. д.). Проблема в том, что Arduino не сохраняет числа с той точностью, которую я им даю. Если то, что вы предложили, должно работать, сначала Arduino должен правильно отображать поплавок на последовательном мониторе. Я ошибаюсь?, @Anthropomorphous Dodecahedron
По умолчанию Serial.print()
печатает числа с плавающей запятой с двумя десятичными цифрами. .
float num = 7.875;
Serial.println(num, 4);
выведет num
с 4 десятичными цифрами, таким образом: 7,8750.
Точность float не уменьшается так, как вы думаете. Посмотрите этот ответ для лучшего объяснения.
- Как получить правильный последовательный порт?
- Как отобразить всю входящую строку с serial monitor в arduino ide?
- SoftwareSerial данные недоступны
- Использование Serial.begin() дважды
- Servo_Pointer' was not declared in this scope
- Использование ESP8266 с Arduino Uno - не удается заставить AT-команду работать
- Операторы If/Else на Arduino не выполняются
- Управлять 2 сервоприводами с последовательным считыванием
Он работает, я ищу adxl335, используя его в качестве измерителя вибрации и балансировщика. У кого-нибудь есть код для ardiuno r3, @nishant shrivastava