Как мы можем округлить число до ближайшего 10 в php?
Скажем, у меня есть 23
, какой код я бы использовал для округления 30
?
Как мы можем округлить число до ближайшего 10 в php?
Скажем, у меня есть 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);
Это округлит число $ до ближайшего 10. Вы также можете передать третью переменную, если необходимо изменить режим округления.
Подробнее здесь: http://php.net/manual/en/function.round.php
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
.
div на 10, затем используйте ceil, затем mult на 10
Пытаться
round(23, -1);
Мы можем "обмануть" через раунд с
$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;
}
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
Я хотел округлить до следующего числа в месте наибольших цифр (есть ли для этого название?), Поэтому я сделал следующую функцию (на 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
Это легко сделать с помощью функции PHP fmod . Приведенный ниже код относится к 10, но вы можете изменить его на любое число.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
ВЫХОД: 100
Попробуйте это ...... введите число, которое нужно округлить, и оно будет округлено до ближайшей десятой. Надеюсь, что это поможет ....
раунд ($ num, 1);