Округление числа с плавающей запятой
Я хочу, чтобы пользователь мог изменять продолжительность ШИМ от 0 до 255, число должно быть в минутах и увеличиваться/уменьшаться с помощью двух кнопок.
(X) x 255 / 60000 = minute
В приведенном выше примере каждый раз, когда плюс нажата кнопка, значение (X) будет умножаться на количество нажатых кнопок.
if (plusButton == HIGH) {
PWMduration += (X);
}
Ближайшее найденное число — 235,29, что соответствует почти 1 минуте:
235.29 x 255 / 60000 = 0.9999
Как я могу округлить это число до 1? или есть другое альтернативное решение для расчета этого?
@ElectronSurf, 👍0
Обсуждение1 ответ
Лучший ответ:
Вы можете привести его к целому числу после добавления смещения.
Приведение к типу int уменьшит значение до наименьшего целочисленного значения (например, 0,9975 станет 0). Однако, если вам нужна точность 0,5 (например, все значения из 0,5 <= x < 1,5 должны быть равны 1,0), добавьте 0,5, таким образом:
int roundedValue = (int)(0.9975 + 0.5);
Если вы используете константы и хотите с ними выполнять вычисления, либо добавьте к ним .0, либо используйте постфикс af(loat) или d(double), например:
float f = 12.0 / 3.0;
или
float f = 12f / 3f;
Затем рассчитать округленное значение:
int roundedValue = (int)(f + 0.5);
- устаревшее преобразование из строковой константы в 'char*'
- как быстро loop() работает в Arduino
- как отправить аргумент объектам ESP8266WebServer в функции
- Arduino синтаксический анализ строки с использованием sscanf
- Объявление переменной внутри основного цикла
- Преобразовать string во float на ардуино
- Как создать проект ардуино с несколькими исходными файлами?
- Как преобразовать символ Unicode в «Unicode HEX Position» в Arduino
Использовать 235.294117647?, @Majenko
@Majenko равно
0,99999999999975
, @ElectronSurfС точки зрения числа с плавающей запятой это 1. Я не думаю, что вы можете представить 1 в виде числа с плавающей запятой., @Majenko
так какое решение? могу ли я преобразовать его в int?, @ElectronSurf
В чем проблема с таким крошечным отличием от 1?, @Majenko
я собираюсь
lcd.print()
это!, @ElectronSurfЯ думаю, вы решаете все это задом наперед. Кроме того, какая польза от ШИМ с периодом в несколько минут?, @Majenko
медленно включает свет в течение определенного периода времени., @ElectronSurf
Итак, вы хотите заглушить ШИМ? Это отличается от определения периода ШИМ. К ШИМ отношения практически не имеет. Все, что вам нужно, это отсрочка., @Majenko
взгляните на этот вопрос, @ElectronSurf
То, что вы хотите сделать, это рассчитать задержку на основе количества минут. Не изменять задержку в зависимости от количества нажатий кнопки. Сохраняйте минуты как целое число. Затем используйте это целое число для расчета продолжительности каждого интервала задержки., @Majenko