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


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

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

15 72

15 ответов:

floor() пойдет вниз.

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

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

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

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

Edit: я делал это так долго.. но ответ Талгринтри чище.

round($number, -1);

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

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

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

функция округлится до ближайшей переменной:

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

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

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

так в коде:

round($num + 5, -1);

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

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

div на 10 затем используйте ceil затем mult на 10

http://php.net/manual/en/function.ceil.php

попробовать

round(23, -1);

мы можем "обмануть" через круг с

$rounded = round($roundee / 10) * 10;

мы также можем избежать прохождения деления с плавающей запятой с

function roundToTen($roundee)
{
  $r = $roundee % 10;
  return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}

Edit: я не знал (и это не очень хорошо документировано на сайте), что 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

попробуйте это:

ceil($roundee / 10) * 10;

просто округлите до ближайших 10, а затем добавьте 10.

round($num, -1) + 10

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

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

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

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