PHP-функция для округления чисел до 0.5 или целых значений

Ниже представлена функция для округления до целых чисел либо 0.5. Причем алгоритм функции работает не по математическому округлению, а по некой вилке диапазона десятичных значений.

/**
 * Округление чисел до 0.5 или целых
 *
 * @param mixed $val
 * @return float
 */
function roundHalf($val) 
{
	$val = round($val, 1);
	$arr = explode('.', $val);
	
	if (empty($arr[1]) || in_array($arr[1], array(1, 2, 3))) {
		$res = $arr[0];
	} elseif (in_array($arr[1], array(4, 5, 6))) {
		$res = $arr[0] . '.5';
	} else {
		if ($val > 0) {
			$res = ceil($val);
		} else {
			$res = floor($val);
		}
	}

	return floatval($res); 
}
PHP

Результаты работы функции:

-1   => float(-1)
-0.9 => float(-1)
-0.8 => float(-1)
-0.7 => float(-1)
-0.6 => float(-0.5)
-0.5 => float(-0.5)
-0.4 => float(-0.5)
-0.3 => float(-0)
-0.2 => float(-0)
-0.1 => float(-0)
0    => float(0)
0.1  => float(0)
0.2  => float(0)
0.3  => float(0)
0.4  => float(0.5)
0.5  => float(0.5)
0.6  => float(0.5)
0.7  => float(1)
0.8  => float(1)
0.9  => float(1)
1    => float(1)

Нужно обратить внимание на отрицательные значения, например для значения «-0.9» функция вернет «1». Функция ceil() с отрицательными работает в другую сторону:

echo ceil(-0.9);      // Выведет 0
echo roundHalf(-0.9); // Выведет -1
PHP
01.03.2024
628
Предыдущая запись Методология БЭМ (BEM)
Следующая запись PHP var_dump в переменную

Комментарии 1

Max Benk Max Benk
3 апреля 2024 в 15:49
function roundHalf($val) 
{
    $val = round($val, 1);
    $intVal = (int)$val;
    $fraction = $val - $intVal;

    if ($fraction < 0.3) {
        $res = $intVal;
    } elseif ($fraction < 0.7) {
        $res = $intVal + 0.5;
    } else {
        $res = $val > 0 ? ceil($val) : floor($val);
    }

    return (float)$res;
}

, чтобы добавить комментарий.

Другие публикации

Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
16342
-1
Замена формата цвета CSS в PHP
С помощью приведенных PHP-функции можно заменить цвета в CSS-стилях.
1699
+1
Работа с массивами PHP – создание, наполнение, удаление
Основные примеры работы с массивами PHP. Создание, наполнение, извлечение удаление значений.
102594
+13
Генерация случайных буквенно-цифровых кодов в PHP
Несколько примеров, как сгенерировать случайные последовательности численных и буквенных строк заданной длины и...
12006
+4
Календарь на PHP
PHP-класс для вывода календаря на месяц, год или любой другой интервал с возможностью выделить отдельные даты и вывести к ним подсказки.
32566
+12
Генерация паролей в PHP
В PHP есть несколько функций для генерации случайного числа, это rand(), mt_rand() и random_int().
23682
+11