我需要一个PHP函数,它将浮动并将其向下舍入到最接近的一半(x.0或x.5)。我发现其他函数会舍入到最接近的分数,但它们都是双向的。
我需要的功能只能向下舍入。
7.778 - > 7.5
7.501 - > 7.5
7.49 - > 7.0
7.1 - > 7.0
答案 0 :(得分:91)
$x = floor($x * 2) / 2;
答案 1 :(得分:11)
我假设PHP有一个底层函数:floor($num * 2) / 2
应该这样做。
答案 2 :(得分:4)
一个简单的解决方案是使用模运算符(fmod()
函数),如下所示:
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));
答案 3 :(得分:4)
您可以以这种方式round($number / 5, 1) * 5
进行操作,round()
中的第二个参数是精度。
$number
等于4.6、4.8和4.75的示例
>>> round(4.6 / 5, 1) * 5;
=> 4.5
>>> round(4.8 / 5, 1) * 5;
=> 5.0
>>> round(4.75 / 5, 1) * 5;
=> 5.0
如果您愿意,也可以像round()
一样round($number, 1, PHP_ROUND_HALF_DOWN)
下来,查看文档以获取更多信息https://www.php.net/manual/en/function.round.php
答案 4 :(得分:3)
echo round($val*2) / 2; // Done
答案 5 :(得分:0)
根据我的工作要求。我提出了一个功能来做到这一点。希望您可以将其视为参考:
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);
}
}