@iAlex195

Как сделать так, чтобы число не выходило за рамки диапазона?

Допустим есть диапазон от 100 до 110.
Как сделать так, чтобы при вычитании из 105 числа 7 получилось 109, а не 98?
  • Вопрос задан
  • 374 просмотра
Пригласить эксперта
Ответы на вопрос 3
dollar
@dollar
Делай добро и бросай его в воду.
Просто делаешь свою функцию и применяешь её.
Например, такую
function check($a) {
    while ($a < 100) $a += 11;
    while ($a > 110) $a -= 11;
    return $a;
}

echo(check(105-7)); // 109

Конкретно эта функция не очень хорошо оптимизирована, но подойдёт во многих простых случаях, хотя ты в любом случае можешь сделать её лучше при желании.
Ответ написан
Это простая задача, но я понимаю почему ты запутался - у тебя сдвинут 0 и возможное слогаемое не всегда внутри класса эквивалентности. Решается просто:
$min = 100;
$max = 111;
$Δ = ($max-$min);

$x = 105;
$y = -7;

$z = ($x-$min+($y%$Δ)+$Δ)%$Δ+$min;


По шагам - тебе нужна $Δ потому что это твой реальный класс.
Делаем следующее - вычитаем минимум, чтобы сдвинуть текущий x в нулевую точку.
Приводим твой $y в класс дельты.
Прибавляем дельту на случай если ты ушел влево за ноль.
Делим по модулю на дельту чтобы вернуться в класс.
И прибавляем минимум чтобы отойти от реального нуля назад к твоему нулю.

UPD: исправил по итогом комментариев.
Ответ написан
@andreysuha
Что то знаю
Никак это правила математики. Если нужно число в диапазоне, то после мат. операции проверять меньше/больше число чем нужно и возвращать граничное если не входит в диапазон
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы