Округление числа с плавающей запятой

Я хочу, чтобы пользователь мог изменять продолжительность ШИМ от 0 до 255, число должно быть в минутах и увеличиваться/уменьшаться с помощью двух кнопок.

(X) x 255 / 60000 = minute

В приведенном выше примере каждый раз, когда плюс нажата кнопка, значение (X) будет умножаться на количество нажатых кнопок.

if (plusButton == HIGH) {
    PWMduration += (X);
}

Ближайшее найденное число — 235,29, что соответствует почти 1 минуте:

235.29 x 255 / 60000 = 0.9999

Как я могу округлить это число до 1? или есть другое альтернативное решение для расчета этого?

, 👍0

Обсуждение

Использовать 235.294117647?, @Majenko

@Majenko равно 0,99999999999975, @ElectronSurf

С точки зрения числа с плавающей запятой это 1. Я не думаю, что вы можете представить 1 в виде числа с плавающей запятой., @Majenko

так какое решение? могу ли я преобразовать его в int?, @ElectronSurf

В чем проблема с таким крошечным отличием от 1?, @Majenko

я собираюсь lcd.print() это!, @ElectronSurf

Я думаю, вы решаете все это задом наперед. Кроме того, какая польза от ШИМ с периодом в несколько минут?, @Majenko

медленно включает свет в течение определенного периода времени., @ElectronSurf

Итак, вы хотите заглушить ШИМ? Это отличается от определения периода ШИМ. К ШИМ отношения практически не имеет. Все, что вам нужно, это отсрочка., @Majenko

взгляните на этот вопрос, @ElectronSurf

То, что вы хотите сделать, это рассчитать задержку на основе количества минут. Не изменять задержку в зависимости от количества нажатий кнопки. Сохраняйте минуты как целое число. Затем используйте это целое число для расчета продолжительности каждого интервала задержки., @Majenko


1 ответ


Лучший ответ:

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);
,