Как получить значение по проценту в диапазоне двух чисел? Например: Значение 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.
Чтобы решить эту проблему, вам нужно учесть направление диапазона (вверх или вниз), чтобы правильно определить, какой из значений является начальным, а какой конечным. Также необходимо учитывать знаки чисел при выполнении операций.
Ниже приведен исправленный код для вашей функции:
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; }
Этот код учитывает различные направления диапазонов и знаки чисел в них, чтобы правильно вычислить значение по проценту в заданном диапазоне.
Чтобы решить эту проблему, вам нужно учесть направление диапазона (вверх или вниз), чтобы правильно определить, какой из значений является начальным, а какой конечным. Также необходимо учитывать знаки чисел при выполнении операций.
Ниже приведен исправленный код для вашей функции:
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;
}
Этот код учитывает различные направления диапазонов и знаки чисел в них, чтобы правильно вычислить значение по проценту в заданном диапазоне.