Подтвердить что ты не робот

Раунд DOWN до ближайшего целого числа в PHP

Мне нужна функция PHP, которая будет принимать float и округлять ее до ближайшей половины (x.0 или x.5). Я нашел другие функции, которые будут округлены до ближайшей фракции, но они обойдутся в обоих направлениях.

Функция, которая мне нужна, может только округлить.

Примеры

7,778 → 7,5

7,501 → 7,5

7,49 → 7,0

7.1 → 7.0

4b9b3361

Ответ 1

$x = floor($x * 2) / 2;

Ответ 2

Я предполагаю, что PHP имеет функцию напольного покрытия: floor($num * 2) / 2 должен это сделать.

Ответ 3

echo round($val*2) / 2;    // Done

Ответ 4

Простое решение - использовать modulo operator (fmod() function), например:

function roundDown($number, $nearest){
    return $number - fmod($number, $nearest);
}

var_dump(roundDown(7.778, 0.5));
var_dump(roundDown(7.501, 0.5));
var_dump(roundDown(7.49, 0.5));
var_dump(roundDown(7.1, 0.5));

И результат:

введите описание изображения здесь

Преимущество, которое работает с любым ближайшим числом (0,75, 22,5, 3,14...)

Вы можете использовать тот же оператор для roundUp:

function roundUp($number, $nearest){
    return $number + ($nearest - fmod($number, $nearest));
}

var_dump(roundUp(7.778, 0.5));
var_dump(roundUp(7.501, 0.5));
var_dump(roundUp(7.49, 0.5));
var_dump(roundUp(7.1, 0.5));

введите описание изображения здесь

Ответ 5

Из моих требований к работе. Я поставил функцию для этого. Надеюсь, вы сможете просмотреть его как ссылку:

function round_half_five($no) {

    $no = strval($no);
    $no = explode('.', $no);
    $decimal = floatval('0.'.substr($no[1],0,2)); // cut only 2 number
    if($decimal > 0) {
        if($decimal <= 0.5) {
            return floatval($no[0]) + 0.5;
        } elseif($decimal > 0.5 && $decimal <= 0.99) {
            return floatval($no[0]) + 1;
        }
    } else {
        return floatval($no);
    }

}