2012-01-07 38 views
2

我正在尋找一種優雅的方式來總結十進制數。似乎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;

回答

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 
+0

我不知道爲什麼我用'pow()',但無法得到正確的結果。我想我犯了一些我沒有注意到的錯誤。非常感謝。 – Revenant 2012-01-07 18:22:18

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

如果我想使用ceil,我不會經歷所有這些麻煩,只是使用'ceil(0.0045001)'對嗎?謝謝你的努力。 – Revenant 2012-01-07 18:14:52

0

相反的ceil(x)你也可以使用(int)x,可以得到相同的結果

編輯:好吧,忘了這一點,我的意思是(int)x + 1,那對於已經圓整的數字來​​說並不是這樣。