簡體   English   中英

始終將小數舍入到指定的精度

[英]Always rounding decimals up to specified precision

我正在尋找一種優雅的方法來總是舍入十進制數。 好像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;

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
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(x)您還可以使用(int)x ,得到相同的結果

編輯:好的,算了吧,我的意思是(int)x + 1 ,而對於已經四舍五入的數字來說,那不是真的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM