Як округлити число до найближчих 10?


99

Як ми можемо округлити число з точністю до 10 у php?

Скажімо 23, що маю , до якого коду я б його округлив 30?


51
Е, це не найближчі 10?
Роуленд Шоу,

1
добре, округли до 1 значущої цифри! ха-ха
тарнфельд

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

1
округлюйте до потужності 10, stackoverflow.com/q/43932648/6521116
Kris Roofe

Відповіді:


219

floor() знизиться.

ceil() піде вгору.

round() за замовчуванням перейде до найближчого.

Ділимо на 10, робимо стеля, потім помножуємо на 10, щоб зменшити значущі цифри.

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

Редагувати: Я так давно роблю це .. але відповідь TallGreenTree чистіша.


4
Відповідь TallGreenTree не завжди округляє її вгору. Ця відповідь є найбільш правильною із використанням ceil ()
Брендон

1
Відповідь TallGreenTree підтримує округлення вгору / вниз, використовуючи третій параметр (режим) 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

Ця відповідь була опублікована до того, як допитувач прояснив себе. Я просто зрозумів, що він не правильно округлив питання.
TallGreenTree

12
TallGreenTree правильний. Ви можете встановити режим округлення з 3-м аргументом: "режим Один із 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
Сумно, що для потоку () та підлоги () ще немає параметра точності.
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.