@Evasium09

Как убрать вывод нуля при $amount = 1?

$rand = mt_rand(1, 1000);
if($rand < 150) {
$res = $user->balance - floor($amount);
$restxt = 'Вы проиграли ' . number_format(floor($amount), 0, '', '.') . '$ (x0) ❌';
}
if($rand >= 150 && $rand < 300) {
$res = $user->balance - floor($amount * 0.75);
$restxt = 'Вы проиграли ' . number_format(floor($amount * 0.75), 0, '', '.') . "$ (x0.25) $bad";
}
if($rand >= 300 && $rand < 450) {
$res = $user->balance - floor($amount * 0.5);
$restxt = 'Вы проиграли ' . number_format(floor($amount * 0.5), 0, '', '.') . "$ (x0.5) $bad";
}
if($rand >= 450 && $rand < 600) {
$res = $user->balance - floor($amount * 0.25);
$restxt = 'Вы проиграли ' . number_format(floor($amount * 0.25), 0, '', '.') . "$ (x0.75) $bad";
}

В этом коде работает все, но при $amount = 1 выводится 0.понимаю что это из за округления, но нужно сделать чтобы выводился 1.
(обязательно нужно округлять до меньшего).
Я уже перепробовал все и без толку. пробовал добавлять 1 к переменной если она равна 1, отдельно ее округлял до большего
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Округление дело такое. При коэффециенте 0.25 как ни округляй, будет 0 для $amount < 2

refactor
$rand = mt_rand(1, 1000);
$bad = '...';

if ($rand < 150) {
    $k = 1;
    $message = '$ (x0) ❌';
} elseif ($rand < 300) {
    $k = 0.75;
    $message = "$ (x0.25) $bad";
} elseif ($rand < 450) {
    $k = 0.5;
    $message = "$ (x0.5) $bad";
} elseif ($rand < 600) {
    $k = 0.25;
    $message = "$ (x0.75) $bad";
}

$delta = round($amount * k);
$res = $user->balance - $delta;
$restxt = 'Вы проиграли ' . number_format($delta, 0, '', '.') . $message;


Если "бизнес-логика" настолько странная, что и округлять в меньшую сторону, и сделать исключение для 1 и только для неё, то
$delta = $amount === 1 ? max(1, floor($amount * k)) : floor($amount * $k);
но следующий вопрос будет «а вот 2 при $k === 0.25 тоже округляется до 0»
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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