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


99

PHPで数値を最も近い10に四捨五入するにはどうすればよいですか?

私が持っていると言います 23としましょう、それを四捨五入するためにどのコードを使用し30ますか?


51
えっと、一番近い 10じゃないの?
Rowland Shaw、

1
では、重要な数値を1つに切り上げます。(笑)
tarnfeld

3
公平を期すためには、タイトルでは、「ラウンド言うまでテキストは「四捨五入」を言うにもかかわらず、最も近い10の番号」...私はかなり確信して、彼はいつものラウンドに求めていますよまで次の 10
アーロンワレンティン

回答:


218

floor() 下がります。

ceil() 上がります。

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

10で除算してセルを計算し、次に10で乗算して有効桁を減らします。

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

編集:私は長い間このようにしてきましたが、TallGreenTreeの答えはより明確です。


4
TallGreenTreeの答えは、必ずしもそれを切り上げるわけではありません。この答えは、ceil()を使用するのが最も正しい
Brandon

1
TallGreenTreeの回答は、round()の3番目のパラメーター(モード)を使用した切り上げ/切り捨てをサポートしています。round($ input、-1、PHP_ROUND_HALF_UP)
Daren

4
@DarenSchwenke、その3番目のパラメーターは、想定したとおりに機能せず、間隔のちょうど中間の場合のみを制御します。(15,-1, PHP_ROUND_HALF_UP); // 20(14,-1, PHP_ROUND_HALF_UP); // 10
Arth

168
round($number, -1);

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

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


11
「最も近い10に四捨五入する」という質問が2度出されたときに、質問者が「最も近い10に四捨五入する」ことを意味していたと非難できますか?
ceejayoz、2009年

この回答は、質問者が明らかにする前に投稿されました。私はちょうど彼が質問で正しく丸めていなかったと思いました。
TallGreenTree 2009年

12
TallGreenTreeは正しいです。あなたは第三引数で丸めモードを設定することができます。「モードPHP_ROUND_HALF_UP、PHP_ROUND_HALF_DOWN、PHP_ROUND_HALF_EVEN、またはPHP_ROUND_HALF_ODDのひとつ。」
D -_- B

13
これは正しい結果を与えません。23なります20と、ない30、それは常に最も近い10丸めモードしません助け、これだけのラウンドの半分以来、後に輪舞ますのでx.
Timo002 14年

1
ceil()とfloor()にはまだ精度パラメーターがないので残念です。
squarecandy '18

15

私は実際、最も近い変数に丸めることができる関数を探していました、そしてこのページは私の検索で現れ続けました。最終的に自分で関数を作成したとき、他の人が見つけられるようにここに投稿すると思いました。

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

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

ケニー、あなたは最高です。それが正確にどのように丸められるかをグラフィック表示したいだけなので、ケースの100%で期待される結果が得られると確信しています。私はいくつかのテストを行う必要があると思います。
Alph.Dev

このコードを変更して、ラウンドモードHALF_UP / HALF_DOWNで3番目のパラメーターを追加する方法はありますか?
Alph.Dev 2016年

12

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

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

だからコードでは:

round($num + 5, -1);

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

最も近い値に切り上げたい場合は100、使用をお勧めします+50


これは、10進数以外の数値では機能しません。10は20になります
Luciano



2

私たちはラウンドで「チート」することができます

$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;    
}

こんにちは、これは完全に機能します。その質問について、どのように切り上げればよいですか?だから23から30?
タルンフェルド2009年



0

私の最初の衝動は「php math」をグーグル検索することでした、そして私は「round()」と呼ばれるコア数学ライブラリー関数があり、それがあなたが望むものであることを発見しました。


0

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


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;
}

0
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

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

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

出力:100


0

最も近い10に、以下のようにする必要があります

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

-2

これを試してください...四捨五入する数値を渡すと、小数点以下第2位に四捨五入されます。

round($ num、1);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.