【问题标题】:Always rounding decimals up to specified precision始终将小数四舍五入到指定的精度
【发布时间】:2012-01-07 18:06:39
【问题描述】:

我正在寻找一种优雅的方法来将小数四舍五入。似乎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;

【问题讨论】:

    标签: php rounding decimal


    【解决方案1】:
    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
    

    【讨论】:

    • 我不知道为什么我将它与pow() 一起使用但无法得到正确的结果。我想我犯了一些我没有注意到的错误。非常感谢。
    【解决方案2】:
    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);
    }
    

    【讨论】:

    • 如果我想使用 ceil,我不会遇到所有这些麻烦,只需使用 ceil(0.0045001) 对吗?不过感谢您的努力。
    【解决方案3】:

    您也可以使用(int)x 来代替ceil(x),结果相同

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      相关资源
      最近更新 更多