float()

float() преобразует целое или другое числовое значение к типу float — это нужно, чтобы деление вроде float(5) / 2 давало 2.5, а не 2.

Полная статья

Описание

float() преобразует значение к типу float — числу с плавающей точкой. Это нужно в ситуациях, когда целочисленная арифметика даёт неверный результат из-за отбрасывания дробной части.

Типичный пример: если написать 5 / 2, Arduino посчитает это как деление двух целых чисел и вернёт 2. Но если хотя бы один операнд привести к floatfloat(5) / 2 — результат будет 2.5, как и ожидается.

Синтаксис

  • float(x)
  • (float) x

Оба варианта равнозначны: первый — функциональная запись, второй — явное приведение типа в стиле C.

Параметры

x: числовое значение любого типа — int, long, byte, double и т. д.

Возвращает

Значение типа float.

Где применяется

  • Вычисление процентов и пропорций — например, чтобы перевести показание АЦП в напряжение: float voltage = float(analogValue) * 5.0 / 1023.0;
  • Усреднение — при делении суммы на количество измерений важно не потерять дробную часть.
  • Масштабирование данных датчиков — когда сырые целые значения нужно перевести в физические единицы с дробной частью.
  • Интерполяция — плавное изменение яркости, скорости или угла между двумя целыми значениями.

Практические замечания

  • На платах с AVR-микроконтроллером (Uno, Nano, Mega) тип float имеет точность около 6–7 значащих цифр. Для финансовых расчётов или задач, требующих высокой точности, этого может не хватить.
  • Ключевой момент: преобразование нужно делать до деления, а не после. Если оба операнда целые и деление уже произошло, дробная часть безвозвратно потеряна — приведение результата к float не поможет.
  • Операции с float работают медленнее целочисленных на AVR-платах, поскольку там нет аппаратного блока для работы с числами с плавающей точкой. Если скорость критична, обдумайте использование целочисленной арифметики с масштабированием.
  • Не сравнивайте числа float через ==: из-за погрешности представления два внешне одинаковых значения могут оказаться не равны. Используйте проверку на близость: abs(a - b) < 0.001.
  • При выводе float через Serial.print() по умолчанию отображаются два знака после запятой. Чтобы увидеть больше, передайте второй аргумент: Serial.print(value, 4).

Полезные материалы