2009-10-24 5 views
68

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

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

+44

Э-э, это не ближайшая * 10? –

+1

ОК, округлите до 1 значащую цифру! haha – tarnfeld

+1

Чтобы быть справедливым, в названии он говорит «round * up * number to ближайшее 10», хотя текст говорит «округлить» ... Я почти уверен, что он просит всегда округлить * вверх * до * next * 10. –

ответ

143

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

ceil() будет расти.

round() пойдет в самое ближайшее время.

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

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

Редактировать: Я делал это так долго, но ответ TallGreenTree чист.

+0

ceil - это работает: D !!! – tarnfeld

+1

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

+0

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

2

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

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

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

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

Редактировать: Я не знал (и это плохо документировано на si те), что round теперь поддерживает «негативный» точность, так что вы можете легко использовать

$round = round($roundee, -1); 

Редактировать снова: Если вы хотите всегда округлять вверх, вы можете попробовать

function roundUpToTen($roundee) 
{ 
    $r = $roundee % 10; 
    if ($r == 0) 
    return $roundee; 
    return $roundee + 10 - $r;  
} 
+0

привет, это отлично работает - для этого вопроса, как я могу обойти UP? так от 23 до 30? – tarnfeld

131
round($number, -1); 

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

Больше информации здесь: http://php.net/manual/en/function.round.php

+1

раунд не то, что он хочет –

+9

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

+0

Этот ответ был опубликован до того, как собеседник уточнил сам. Я просто подумал, что он не правильно округляет вопрос. – TallGreenTree

0

Мой первый импульс был Google для «PHP математике», и я обнаружил, что есть основная функция математическая библиотека называется «круглые()» вероятно, это то, что вы хотите.

2
$value = 23; 
$rounded_value = $value - ($value % 10 - 10); 
//$rounded_value is now 30 
1

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

round($num, -1) + 10 
+0

это будет работать для примера, размещенного (от 23 до 30), но приведет к тому, что 27 округляется до 40. – squarecandy

6

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

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

Так в коде:

round($num + 5, -1); 

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

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

+0

Это самый правильный ответ! –

9

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

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

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 
+0

Кенни, ты лучший. Мне жаль, что у меня не было графического представления о том, как он округляется, поэтому я уверен, что он дает ожидаемые результаты в 100% случаев. Думаю, мне нужно будет провести некоторое тестирование. –

+0

Есть ли способ изменить этот код, чтобы добавить третий параметр с круглым режимом HALF_UP/HALF_DOWN? –

-1

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

round ($ num, 1);

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; 
} 
Смежные вопросы