ARDUINO принимаю float функцией, она его обрезает причем очень странно: из 123.456 сделала 123.46, а из 123.546 вообще 123.55

CHydeR

✩✩✩✩✩✩✩
30 Апр 2024
4
0
int x = 20;

void setup() {
Serial.begin(9600);

}

void loop() {
float arg = 123.456
send(123.456);
delay(500);
}

void send(float data1) {
Serial.println(data1);
String data = String(data1);
Serial.println(data);
/*
Serial.write("A");
for ( auto num : data ) {
Serial.write(num);
delay(x);
}
Serial.write("a");
*/
}
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
134
@CHydeR,
В данном случае странного ничего нет, ПРИ ВЫВОДЕ происходит округление до 2 - х знаков (по умолчанию) после запятой, Cамо число не меняется.
Хотите ВЫВОДИТЬ больше или меньше - надо указать явно - например Serial.println(data1, 3);

"Странное" округление может начаться если количество цифр больше шести. Т.к. во флоат помещается только 6 - 7 значащих цифр.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,410
976
58
Марий-Эл
Нужно было в школе математику учить. Это не странность а округление.
Функция по умолчанию передаёт плавающую запятую с двумя значащими цифрами после запятой.
Нужно явно указывать, сколько цифр нужно.
Serial.println(data1, 4)
 

CHydeR

✩✩✩✩✩✩✩
30 Апр 2024
4
0
А почему тогда когда я перевожу значение из float в String, у него снова остается 2 знака после запятой? мне нужно передать все знаки без округления
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
134
@CHydeR,
По той же самой причине. По умолчанию два знака, другое количество надо указывать явно.
(Задавайте вопросы с примером).