float()
float() преобразует целое или другое числовое значение к типу float — это нужно, чтобы деление вроде float(5) / 2 давало 2.5, а не 2.
Полная статья
Описание
float() преобразует значение к типу float — числу с плавающей точкой. Это нужно в ситуациях, когда целочисленная арифметика даёт неверный результат из-за отбрасывания дробной части.
Типичный пример: если написать 5 / 2, Arduino посчитает это как деление двух целых чисел и вернёт 2. Но если хотя бы один операнд привести к float — float(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).