PHPで数値を最も近い10に四捨五入するにはどうすればよいですか?
私が持っていると言います 23
としましょう、それを四捨五入するためにどのコードを使用し30
ますか?
PHPで数値を最も近い10に四捨五入するにはどうすればよいですか?
私が持っていると言います 23
としましょう、それを四捨五入するためにどのコードを使用し30
ますか?
回答:
floor()
下がります。
ceil()
上がります。
round()
デフォルトでは最も近い場所に移動します。
10で除算してセルを計算し、次に10で乗算して有効桁を減らします。
$number = ceil($input / 10) * 10;
編集:私は長い間このようにしてきましたが、TallGreenTreeの答えはより明確です。
(15,-1, PHP_ROUND_HALF_UP); // 20
、(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
これにより、$ numberが最も近い10に丸められます。丸めモードを変更する必要がある場合は、3番目の変数を渡すこともできます。
23
なります20
と、ない30
、それは常に最も近い10丸めモードしません助け、これだけのラウンドの半分以来、後に輪舞ますのでx.
。
私は実際、最も近い変数に丸めることができる関数を探していました、そしてこのページは私の検索で現れ続けました。最終的に自分で関数を作成したとき、他の人が見つけられるようにここに投稿すると思いました。
関数は最も近い変数に丸めます。
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を使用してからmult by 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;
}
最大の桁の次の数値に切り上げたいと思ったので(その名前はありますか?)、次の関数(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;
}
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