2012-01-07 10 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

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

0

代わりのceil(x)あなたも同じ結果を与える(int)xを、使用することができますが

編集:OKを忘れて、私は(int)x + 1を意味しています。すでに丸められている数字には当てはまりません。

関連する問題