在PHP中向下舍入到最接近的半整数

时间:2010-07-09 20:53:30

标签: php

我需要一个PHP函数,它将浮动并将其向下舍入到最接近的一半(x.0或x.5)。我发现其他函数会舍入到最接近的分数,但它们都是双向的。

我需要的功能只能向下舍入。

实施例

7.778 - > 7.5

7.501 - > 7.5

7.49 - > 7.0

7.1 - > 7.0

6 个答案:

答案 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));

结果:

enter image description here

与最近的数字(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));

enter image description here

答案 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);
    }

}