Преобразуйте диапазон числа в другой диапазон, поддержав отношение

Довольно много решений, ни одно из них не решило мою проблему.

Eclipse Oxygen 3a, апрель 2018 года, установщик работает нормально,

Моя проблема - запуск Eclipse на DCEVM JRE. Указание Eclipse на немодифицированную JVM решило эту проблему.

236
задан SpliFF 29 May 2009 в 18:48
поделиться

2 ответа

NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin

Или немного более читабельно:

OldRange = (OldMax - OldMin)  
NewRange = (NewMax - NewMin)  
NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin

Или, если вы хотите защитить от случая, когда старый диапазон равен 0 ( OldMin = OldMax ):

OldRange = (OldMax - OldMin)
if (OldRange == 0)
    NewValue = NewMin
else
{
    NewRange = (NewMax - NewMin)  
    NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin
}

Обратите внимание, что в этом случае мы вынужден произвольно выбрать одно из возможных новых значений диапазона. В зависимости от контекста разумный выбор может быть следующим: NewMin ( см. Образец ), NewMax или (NewMin + NewMax) / 2

475
ответ дан 23 November 2019 в 03:26
поделиться

Это простое линейное преобразование.

new_value = ( (old_value - old_min) / (old_max - old_min) ) * (new_max - new_min) + new_min

Таким образом, преобразование 10000 по шкале от -16000 до 16000 в новую шкалу от 0 до 100 дает:

old_value = 10000
old_min = -16000
old_max = 16000
new_min = 0
new_max = 100

new_value = ( ( 10000 - -16000 ) / (16000 - -16000) ) * (100 - 0) + 0
          = 81.25
59
ответ дан 23 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: