Как получить значение по проценту в диапазоне двух чисел? Например:
Значение 10% в диапазоне между 0.0 и 20.0 будет 2.0
Значение 50% в диапазоне между -5.0 и 5.0 будет 0
Вся сложность в том, что это векторное вычисление, и - на - здесь не дает +
Диапазон может быть, например, (-5.0, -10.0), (5.0, 10.0), (-5.0, 10.0), в общем, идти и к верху и к низу.
Эта задача возникла в разработке игры. Пример:(float StartValue, float EndValue, float Percent) {
const float OnePercent = (EndValue - StartValue) / 100.0f;
return StartValue + OnePercent * Percent;
}
Но это вычисление работает только если оба числа положительные, и если StartValue всегда ниже, чем EndValue.

21 Авг 2019 в 06:09
205 +1
0
Ответы
1

Чтобы решить эту проблему, вам нужно учесть направление диапазона (вверх или вниз), чтобы правильно определить, какой из значений является начальным, а какой конечным. Также необходимо учитывать знаки чисел при выполнении операций.

Ниже приведен исправленный код для вашей функции:

float GetValueByPercentage(float StartValue, float EndValue, float Percent) {
if (StartValue > EndValue) {
std::swap(StartValue, EndValue); // меняем местами значения, если начальное больше конечного
}
float OnePercent = std::abs(EndValue - StartValue) / 100.0f; // определяем значение одного процента
if (EndValue < 0) {
return EndValue + OnePercent * Percent; // если оба значения отрицательные, нужно идти от большего к меньшему
} else {
return StartValue + OnePercent * Percent; // иначе идем от меньшего к большему
}
}
int main() {
float value1 = GetValueByPercentage(0.0, 20.0, 10); // 2.0
float value2 = GetValueByPercentage(-5.0, 5.0, 50); // 0.0
std::cout << "Value 1: " << value1 << std::endl;
std::cout << "Value 2: " << value2 << std::endl;
return 0;
}

Этот код учитывает различные направления диапазонов и знаки чисел в них, чтобы правильно вычислить значение по проценту в заданном диапазоне.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 905 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир