Как округлить число до ближайшего 10?


99

Как мы можем округлить число до ближайшего 10 в php?

Скажем, у меня есть 23, какой код я бы использовал для округления 30?


51
Эээ, это не ближайшие 10?
Роуленд Шоу,

1
хорошо, тогда округлите до 1 значащей цифры! ха-ха
tarnfeld

3
Чтобы быть справедливым, в названии, он говорит , что «круглый вверх рядом с точностью до 10», даже если текст говорит «округлить» ... Я уверен , что он просит , чтобы всегда круглый вверх к следующему 10.
Аарону Валлентин

1
округлить до степени 10, stackoverflow.com/q/43932648/6521116
Крис Руф,

Ответы:


219

floor() спустится.

ceil() пойдет вверх.

round() по умолчанию перейдет к ближайшему.

Разделите на 10, сделайте потолок, затем умножьте на 10, чтобы уменьшить значащие цифры.

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

Изменить: я так долго делал это ... но ответ TallGreenTree чище.


4
Ответ TallGreenTree не всегда округляет его вверх. Этот ответ является наиболее правильным с использованием ceil ()
Брэндон,

1
Ответ TallGreenTree поддерживает округление вверх / вниз с использованием третьего параметра (режима) round (). round ($ input, -1, PHP_ROUND_HALF_UP)
Дарен Швенке

4
@DarenSchwenke, этот третий параметр не совсем работает, как вы предполагаете, он контролирует только случай ровно посередине между интервалами. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Арт

168
round($number, -1);

Это округлит число $ до ближайшего 10. Вы также можете передать третью переменную, если необходимо изменить режим округления.

Подробнее здесь: http://php.net/manual/en/function.round.php


11
Можно ли их винить в том, что они предположили, что вопрошающий имел в виду «округлить до ближайших 10», когда в вопросе дважды говорилось «округлить до ближайших 10»?
ceejayoz,

Этот ответ был опубликован до того, как спрашивающий пояснил себя. Я просто подумал, что он неправильно ответил в вопросе.
Уилл Барретт,

12
TallGreenTree правильно. Вы можете установить режим округления с помощью третьего аргумента: «mode One из 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

1
К сожалению, ceil () и floor () еще не имеют параметра точности.
squarecandy

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?
Alph.Dev

12

На этот вопрос есть много ответов, наверное, все дадут вам ответ, который вы ищете. Но, как упоминает @TallGreenTree, для этого есть функция.

Но проблема с ответом @TallGreenTree заключается в том, что он не округляется до ближайшего 10. Чтобы решить эту проблему, добавьте +5к своему числу, чтобы округлить. Если вы хотите округлить, сделайте-5 .

Итак, в коде:

round($num + 5, -1);

Вы не можете использовать round mode для округления, потому что это округляет только дроби, а не целые числа.

Если вы хотите округлить до ближайшего 100, используйте +50.


Это не работает для недесятичных чисел. 10 становится 20
Лучано



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?
tarnfeld



0

Моим первым порывом было поискать в Google "php math", и я обнаружил, что есть основная функция математической библиотеки под названием "round ()", которая, вероятно, именно то, что вам нужно.


0

Для людей, которые хотят делать это с чистым SQL, без использования php, java, python и т. Д. 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

Попробуйте это ...... введите число, которое нужно округлить, и оно будет округлено до ближайшей десятой. Надеюсь, что это поможет ....

раунд ($ num, 1);

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.