Phpで数値を最も近い10に丸めるにはどうすればよいですか?
23
があるとします。30
に丸めるためにどのコードを使用しますか?
floor()
はダウンします。
ceil()
が上がります。
round()
はデフォルトで最も近くに移動します。
10で割り、上限を下げてから10を掛けて有効数字を減らします。
$number = ceil($input / 10) * 10;
編集:私は長い間この方法でやってきた..しかしTallGreenTreeの答えはきれいです。
round($number, -1);
これにより、$ numberが最も近い10に丸められます。必要に応じて3番目の変数を渡して、丸めモードを変更することもできます。
私は実際に、最も近い変数に丸めることができる関数を検索していましたが、このページは検索で表示され続けました。だから、私がついに自分で関数を書くことになったとき、他の人が見つけられるようにここに投稿すると思いました。
関数は最も近い変数に丸めます:
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
この質問には多くの答えがありますが、おそらくすべてがあなたが探している答えを与えるでしょう。しかし、@ TallGreenTreeが言及しているように、これには関数があります。
しかし、@ TallGreenTreeの答えの問題は、切り上げられず、最も近い10に切り上げられることです。これを解決するには、数値に+5
を追加して切り上げます。切り捨てる場合は、-5
を実行します。
コードで:
round($num + 5, -1);
round mode
を切り上げに使用することはできません。これは、整数ではなく小数部のみを切り上げるためです。
最も近い100
に切り上げたい場合は、+50
を使用する必要があります。
10で除算し、次にceilを使用してから10で除算します
ラウンドで「チート」できます
$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;
}
試して
round(23, -1);
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
これを試して:
ceil($roundee / 10) * 10;
最も近い10に切り捨ててから、10を追加します
round($num, -1) + 10
Php、Javaを使用せずに生のSQLでそれを実行したい人のために、pythonなど。SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
私は最大桁の次の数値に切り上げたいと思っていました(その名前はありますか?)ので、次の関数を(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;
}
私の最初の衝動は「php math」をグーグルすることで、「round()」というコア数学ライブラリ関数があり、それがおそらくあなたが望むものであることがわかりました。
これはPHP 'fmod'関数を使用して簡単に実現できます。以下のコードは10に固有ですが、任意の数値に変更できます。
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
出力:100
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