C странное поведение при делении двух поплавков - PullRequest
3 голосов
/ 03 марта 2020

У меня есть код, который я запускаю на ESP32, написанном на Arduino. Проблема в том, что мой результат округляется, когда его не должно быть.

float step_value = (float)abs(levels_values[i] - levels_values[i - 1]) / abs(levels_percentages[i] - levels_percentages[i - 1]);
float percentage_diff = (float)abs(current_value - levels_values[i - 1]) / step_value;

Serial.println(step_value);   
Serial.println(2.00/step_value);
Serial.println(2.00/0.07);

И внутри консоли вывод:

0.07
30.00
28.57

Почему, если я делю на переменную , Я получаю округленное значение, и когда я делю на значение переменной, я получаю правильное значение.

levels_values ​​ и levels_percentages векторы имеют тип INT

1 Ответ

1 голос
/ 03 марта 2020

Значение step_value составляет около .0666667. Serial.println(step_value) не печатает полное значение; оно округляется до двух десятичных цифр после десятичной точки.

Serial.println(2.00/step_value) печатает «30,00», потому что 2,00 / .0666667 составляет около 30.

Serial.println(2.00/0.07) печатает «28,57», потому что 2,00 /.07 составляет около 28,57.

...