Проблема с конвертацией int в float C++ Arduino
Я писал код для передачи данных переменных одной ардуине к другой но столкнулся с одной проблемой: данные мне надо передавать в виде переменных int, но некоторые переменные, такие как температура окружения и влажность, находятся в типе float.
Первой моей мыслю было взять значение температуры и влажности (на момент написания это 24.6 и 44.2) умножить на 10, получить целое число, передать ардуине и там на месте поделить обратно на 10.
float hum;
float temp;
hum = dht.readHumidity(); // меряем влажность
temp = dht.readTemperature(); // меряем температуру
int hum1;
hum1 = hum * 10;
int temp1;
temp1 = temp * 10;
Уже на другой ардуине:
float hum2;
hum2 = hum1 / 10;
float temp2;
temp2 = temp1 / 10;
Но на выходе я получал не 24.6 и 44.2, а 24.0 и 44.0
Вопрос касается конвертирования переменной в которой хранится число из одного типа данных в другой, а не просто числа.
Ответы (1 шт):
Пока я писал этот вопрос я уже нагуглил ответ.
Причиной неправильной конвертации оказалось то что переменные temp1 и hum1 являются данными int, а если мы делим число int на другое число то в результате получим число тоже в типе данных int, но из-за того что мы хочем получить данные в float к результату просто допишется .0
Решением является правильная подача данных. Что бы получить результат в типе данных float надо что бы данные которые мы конвертируем тоже были в этом типе.
int i1 = 11;
int i2 = 3;
float x = i1 / i2; // 11 / 3 = 3
//результатом будет х = 3.00
int i1 = 11;
int i2 = 3;
float x = (float)i1 / i2; // 11.0 / 3.0 = 3.66
//результатом будет х = 3.66
В моем же случае решением на другой ардуине будет:
float hum2;
hum2 = (float)hum1 / 10;
float temp2;
temp2 = (float)temp1 / 10;
Подробнее про конвертацию тут