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

      $res = ($rand == 1 ? $user->balance - $amount : ($rand == 2 ? $user->balance - floor(($amount / 4) * 3) : ($rand == 3 ? $user->balance - floor(($amount / 2)) : ($rand == 4 ? $user->balance - floor(($amount / 4)) : ($rand == 5 ? $user->balance * 1 : $user->balance + $amount)))));

имеется такой код, тут в зависимости от числа в переменной $rand будут происходить разные действия с балансом игрока. Но имеется проблема, мне нужно округлять до меньшего все эти числа, но если в переменной $amount число 1, в результате действий (например $amount / 4) будет получаться ноль. Как можно сделать так чтобы этого не происходило?


Ответы (1 шт):

Автор решения: Gene Erbin

Примерно так, если я правильно разобрал эту цепочку условий.

function myFloor($amount, $divider) {
  if ($amount == 1) {
    return $amount; // Или $amount / $divder, не понял по условию, если $amount == 1, то не округлять или не округлять и не делить
  } else {
    return floor($amount / $divider);
  }
}

switch ($rand) {
  case 1:
    $res = $user->balance - $amount;
    break;
  case 2:
    $res = $user->balance - myFloor($amount, 4) * 3;
    break;
  case 3:
    $res = $user->balance - myFloor($amount, 2);
    break;
  case 4:
    $res = $user->balance - myFloor($amount, 4);
    break;
  case 5:
    $res = $user->balance;
    break;
  default:
    $res = $user->balance + $amount;
}

Вариант с match в PHP8

function myFloor($amount, $divider) {
  if ($amount == 1) {
    return $amount; // Или $amount / $divder, не понял по условию, если $amount == 1, то не округлять или не округлять и не делить
  } else {
    return floor($amount / $divider);
  }
}

$res = match ($rand) {
  1 => $user->balance - $amount,
  2 => $user->balance - myFloor($amount, 4) * 3,
  3 => $user->balance - myFloor($amount, 2),
  4 => $user->balance - myFloor($amount, 4),
  5 => $user->balance,
  default => $user->balance + $amount,
};
→ Ссылка