PHP Round功能 - 最高可达2 dp?

时间:2011-06-21 14:18:40

标签: php math rounding

在PHP中,我如何将值22.04496舍入为22.05?看起来     回合(22.04496,2)= 22.04。应该不是22.05 ??

提前致谢

5 个答案:

答案 0 :(得分:5)

你可以使用ceil并乘以除以10的幂来实现。

echo ceil( 1.012345 * 1000)/1000;

1.013

答案 1 :(得分:3)

不要在细胞,地板或圆形功能内进行倍增!您将获得浮点错误,这可能非常难以预测。为了避免这种情况:

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

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

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

答案 2 :(得分:2)

PHP的round函数可以处理一个额外的参数,它控制舍入的完成方式:{​​{3}}

链接中的示例:

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

答案 3 :(得分:0)

我认为最好的方法:

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!

答案 4 :(得分:-2)

为什么要22.05?第三个小数是小于5 ,因此当你将它四舍五入到2位小数时,它会向下舍入到22.04