始终将小数舍入到指定的精度

时间:2012-01-07 18:06:39

标签: php rounding decimal

我正在寻找一种优雅的方法来向上舍入十进制数字。似乎round(0.0045001, 5, PHP_ROUND_HALF_UP);没有返回我的预期,所以我提出了以下功能;

function roundUp($number, $precision) {
    $rounded = round($number, $precision);

    if ($rounded < $number) {
        $add = '0';
        for ($i = 1; $i <= $precision; $i++) {
            if ($i == 1) $add = '.';
            $add .= ($i == $precision) ? '1' : '0';
        }
        $add = (float) $add;
        $rounded = $rounded + $add;
    }

    return $rounded;
}

我想知道是否还有其他更优雅的方法来实现这一目标?

预期结果 var_dump(roundUp(0.0045001, 5)) // 0.00451;

3 个答案:

答案 0 :(得分:4)

function roundup_prec($in,$prec)
{
    $fact = pow(10,$prec);
    return ceil($fact*$in)/$fact;
}

echo roundup_prec(0.00450001,4)."\n";
echo roundup_prec(0.00450001,5);

给出:

0.0046
0.00451

答案 1 :(得分:0)

function roundUp($number, $precision) {
    $rounded = round($number, $precision);

    if ($rounded < $number) {
        $add = '0';
        for ($i = 1; $i <= $precision; $i++) {
            if ($i == 1) $add = '.';
            $add .= ($i == $precision) ? '1' : '0';
        }
        $add = (float) $add;
        $rounded = $rounded + $add;
    }

    return ceil($rounded);
}

答案 2 :(得分:0)

您也可以使用ceil(x)代替(int)x,这会产生相同的结果

编辑:好吧,忘了那个,我的意思是(int)x + 1,对于已经四舍五入的数字而言,这不是真的。