Ответ 1
$x = floor($x * 2) / 2;
Мне нужна функция PHP, которая будет принимать float и округлять ее до ближайшей половины (x.0 или x.5). Я нашел другие функции, которые будут округлены до ближайшей фракции, но они обойдутся в обоих направлениях.
Функция, которая мне нужна, может только округлить.
7,778 → 7,5
7,501 → 7,5
7,49 → 7,0
7.1 → 7.0
$x = floor($x * 2) / 2;
Я предполагаю, что PHP имеет функцию напольного покрытия: floor($num * 2) / 2
должен это сделать.
echo round($val*2) / 2; // Done
Простое решение - использовать 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));
Из моих требований к работе. Я поставил функцию для этого. Надеюсь, вы сможете просмотреть его как ссылку:
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);
}
}