Проблема с конвертацией 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 шт):

Автор решения: szndn

Пока я писал этот вопрос я уже нагуглил ответ.

Причиной неправильной конвертации оказалось то что переменные 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;

Подробнее про конвертацию тут

→ Ссылка