web-dev-qa-db-ja.com

数値を最も近い10に切り上げる方法は?

Phpで数値を最も近い10に丸めるにはどうすればよいですか?

23があるとします。30に丸めるためにどのコードを使用しますか?

83
tarnfeld

floor()はダウンします。

ceil()が上がります。

round()はデフォルトで最も近くに移動します。

10で割り、上限を下げてから10を掛けて有効数字を減らします。

$number = ceil($input / 10) * 10;

編集:私は長い間この方法でやってきた..しかしTallGreenTreeの答えはきれいです。

185
Daren Schwenke
round($number, -1);

これにより、$ numberが最も近い10に丸められます。必要に応じて3番目の変数を渡して、丸めモードを変更することもできます。

詳細はこちら: http://php.net/manual/en/function.round.php

159
TallGreenTree

私は実際に、最も近い変数に丸めることができる関数を検索していましたが、このページは検索で表示され続けました。だから、私がついに自分で関数を書くことになったとき、他の人が見つけられるようにここに投稿すると思いました。

関数は最も近い変数に丸めます:

function roundToTheNearestAnything($value, $roundTo)
{
    $mod = $value%$roundTo;
    return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}

このコード:

echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';

出力されます:

1230
1235
1230
1169
12
Kenny

この質問には多くの答えがありますが、おそらくすべてがあなたが探している答えを与えるでしょう。しかし、@ TallGreenTreeが言及しているように、これには関数があります。

しかし、@ TallGreenTreeの答えの問題は、切り上げられず、最も近い10に切り上げられることです。これを解決するには、数値に+5を追加して切り上げます。切り捨てる場合は、-5を実行します。

コードで:

round($num + 5, -1);

round modeを切り上げに使用することはできません。これは、整数ではなく小数部のみを切り上げるためです。

最も近い100に切り上げたい場合は、+50を使用する必要があります。

10
Timo002

10で除算し、次にceilを使用してから10で除算します

http://php.net/manual/en/function.ceil.php

7
Johnno Nolan

ラウンドで「チート」できます

$rounded = round($roundee / 10) * 10;

浮動小数点除算を回避することもできます

function roundToTen($roundee)
{
  $r = $roundee % 10;
  return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}

編集:roundが「負の」精度をサポートするようになったことを知りませんでした(また、サイトで十分に文書化されていません)。

$round = round($roundee, -1);

もう一度編集:常に切り上げたい場合は、試してみてください

function roundUpToTen($roundee)
{
  $r = $roundee % 10;
  if ($r == 0)
    return $roundee;
  return $roundee + 10 - $r;    
}
2
Adam Wright

試して

round(23, -1);

2
Artyom Sokolov
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
2
wormhit

これを試して:

ceil($roundee / 10) * 10;
1
tarnfeld

最も近い10に切り捨ててから、10を追加します

round($num, -1) + 10
1
Scott Tesler

Php、Javaを使用せずに生のSQLでそれを実行したい人のために、pythonなど。SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';

0
Nagibaba

私は最大桁の次の数値に切り上げたいと思っていました(その名前はありますか?)ので、次の関数を(phpで)作成しました。

//Get the max value to use in a graph scale axis, 
//given the max value in the graph
function getMaxScale($maxVal) {
    $maxInt = ceil($maxVal);
    $numDigits = strlen((string)$maxInt)-1; //this makes 2150->3000 instead of 10000
    $dividend = pow(10,$numDigits);
    $maxScale= ceil($maxInt/ $dividend) * $dividend;
    return $maxScale;
}
0
Robert

私の最初の衝動は「php math」をグーグルすることで、「round()」というコア数学ライブラリ関数があり、それがおそらくあなたが望むものであることがわかりました。

0
Berry

これはPHP 'fmod'関数を使用して簡単に実現できます。以下のコードは10に固有ですが、任意の数値に変更できます。

$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;

出力:100

0
The Bad Brad
Hey i modify Kenny answer and custom it not always round function now it can be ceil and floor function

function roundToTheNearestAnything($value, $roundTo,$type='round')
    {
        $mod = $value%$roundTo;
        if($type=='round'){
            return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
        }elseif($type=='floor'){
            return $value+($mod<($roundTo/2)?-$mod:-$mod);
        }elseif($type=='ceil'){
            return $value+($mod<($roundTo/2)?$roundTo-$mod:$roundTo-$mod);
        }

    }

echo roundToTheNearestAnything(1872,25,'floor'); // 1850<br>
echo roundToTheNearestAnything(1872,25,'ceil'); // 1875<br>
echo roundToTheNearestAnything(1872,25,'round'); // 1875
0
Rifat