PHP Round函数-四舍五入到2 dp


PHP Round function - round up to 2 dp?

在PHP中,如何将值22.04496四舍五入,使其变为22.05?看起来圆形(22.04496.2)=22.04。应该不是22.05吗??

提前感谢

您可以使用ceil和10的乘除来实现。

echo ceil( 1.012345 * 1000)/1000;
1.013

不要在ceil、floor或round函数内进行乘法运算!你会得到浮点错误,这可能是非常不可预测的。为了避免这种情况:

function ceiling($value, $precision = 0) {
    $offset = 0.5;
    if ($precision !== 0)
        $offset /= pow(10, $precision);
    $final = round($value + $offset, $precision, PHP_ROUND_HALF_DOWN);
    return ($final == -0 ? 0 : $final);
}

例如,ceiling(2.2200001, 2)将给出2.23

根据评论,我还添加了我的地板功能,因为这有类似的问题:

function flooring($value, $precision = 0) {
    $offset = -0.5;
    if ($precision !== 0)
        $offset /= pow(10, $precision);
    $final = round($value + $offset, $precision, PHP_ROUND_HALF_UP);
    return ($final == -0 ? 0 : $final);
}

PHP的round函数可以处理一个额外的参数,该参数控制如何进行舍入:http://php.net/manual/en/function.round.php

链接示例:

echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

我认为最好的方法是:

echo ceil(round($value * 100)) / 100;

示例:

$value = 77.4;
echo ceil($value * 100) / 100; // 77.41 - WRONG!
echo ceil(round($value * 100)) / 100; // 77.4 - OK!

它工作不好。

round(1.211,2,PHP_ROUND_HALF_UP); 
// Res: 1.21

我的解决方案:

$number = 1.211;
echo myCeil($number,2);
function myCeil($number,$precision = 0){
    $pow = pow(10,$precision);
    $res = (int)($number * $pow) / $pow;
    
    if($number > $res){
        $res += 1 / $pow;
    }
    return $res;
}
// Res 1.22

为什么应该是22.05?第三个小数点小于5,因此当您将其四舍五入到小数点精度2时,它将向下四舍五进到22.04