Как округлить число до ближайших 10?
Как мы можем округлить число до ближайших 10 в php?
скажи, что у меня есть 23
, какой код я бы использовал, чтобы округлить его до 30
?
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
.
мы можем "обмануть" через круг с
$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; }
мой первый импульс был 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