Как округлить число php
Функция PHP round — округляем быстро и просто
В этой статье мы рассмотрим PHP-функцию, с помощью которой можно выполнять такую математическую операцию, как округление числа. Также читатель узнает о нескольких режимах работы данной функции и возможных способах ее реализации. Для наилучшего понимания теория будет сопровождаться практическими примерами.
Прежде чем продолжить, следует сказать, что в языке PHP предусмотрены три типа округления целого и дробного числа (в большую сторону, в меньшую сторону, а также по стандартному математическому правилу). Начнём с третьего типа. Здесь round() округляет значения по правилу, которое все проходили в школе. Давайте его вспомним: 1) если цифра, подлежащая округлению, находится в пределах 0-4, то цифра разряда, до которого осуществляется округление, не изменяется, а оставшиеся числа заменяются нулями; 2) если цифра, подлежащая округлению, находится в пределах 5-9, то цифра разряда, до которого осуществляется округление, повышается на единицу, а оставшиеся числа тоже заменяются нулями.
Исходя из вышесказанного, рассмотрим несколько практических примеров:
В результате работы этого кода на экран будет выведено целое число 5.
Идём дальше. Следующий пример выведет уже целое число 6, что отвечает правилу, написанному выше:
Также можно определить, до какого именно числа округлять значения. Для этого следует указать не только число, но и количество знаков, находящихся до запятой (количество знаков (символов), находящихся после запятой). Общий синтаксис предельно прост:
Рассмотрим на примере:
Вы можете проверить работу этого кода самостоятельно, используя простейший онлайн-компилятор.
Округляем в большую/меньшую сторону
Осталось рассмотреть, как округлять цифры в меньшую или большую сторону. Сделать это тоже несложно, но потребуется дополнительный третий параметр, называемый mode. Этот параметр нужен для передачи соответствующей константы. Речь идёт о специальных зарезервированных в языке константах, которые перечислены ниже: • PHP_ROUND_HALF_UP — используется, если надо округлить в большую сторону; • PHP_ROUND_HALF_DOWN — используется, если надо округлить в меньшую сторону.
Обязательно рассмотрим практические примеры работы констант:
Это предельно простые операции, освоить которые не составит труда. Если же хотите получить действительно продвинутые знания по PHP-разработке, добро пожаловать на специализированный курс в OTUS!
Источники: • http://code.mu/ru/php/manual/math/round/; • https://learn.javascript.ru/number; • https://tutomath.ru/5-klass/okruglenie-naturalnyh-chisel.html.
И не забывайте оставлять свои комментарии!
Функция округления в большую сторону
Возникла следующая проблема. Нужна функция для округления числа до сотых в большую сторону. Изначально функция имела следующий вид:
но возникла проблема при передаче в функцию следующего значения round_up(740*0.006,2) она выдает 4,45 вместо 4,44. Далее функцию подкорректировал в следующий вид:
предыдущую проблему решила, но возникла также новая при передаче в функцию след.значения:
она выдает 19,25 вместо 19,26. Может кто уже сталкивался с таким? Заранее большое спасибо.
3 ответа 3
Тогда, первая приведенная вами функция работает правильно, но ошибка возникает из-за погрешности вычислений. я думаю, что pow ( 10, 2.0 ) выдаст не ровно 100 а что-то типа 100.000001 Если необходимо округлять строго до 2 знаков попробуйте
Извините, Вы пытаетесь придумать новый способ округления? Почему это 3208,34*0,006 должно давать 19,26? Если результат без округления равно 19,25004. Рекомендую ознакомиться с существующими общепринятыми правилами округления, ведь вы используете в своей функции функцию ceil, которая основана на правилах округления. А если Вы пытаетесь использовать правило, которую сами придумываете, то тут уже Вам придется полностью переписать свой алгоритм округления.
Основная беда при работе с числами с плавающей точкой в том, что их внутреннее представление может отличаться, да и почти всегда отличается от десятичного. То бишь изначально, часто они являются иррациональными числами в десятичном представлении.
Для учёта отрицательных чисел надо добавить соответствующую проверку.
Округлить целое число в меньшую сторону Php.
Подробно об округлении целого числа в меньшую сторону.
Примеры округления в меньшую сторону целого числа.
Для того, чтобы понять, как работает функция округления в меньшую сторону целого числа, давайте выведем несколько примеров, в уже потом сформулируем правило! Чтобы было на чем основываться!
Результат:
Результат:
Функция для округления в меньшую сторону целого числа.
В этом пункте, мы можем сформировать правило округления целых чисел с помощью функции round:
Если требуется округлить целое число в меньшую сторону, то число будет округлено в меньшую сторону в том случае, если ваше число меньше 5. Вторым параметром указывается указывается отрицательное число, которое будет указывать, на каком по счету с правого края будет произведено округление.
Результат:
Если указывается число “-2”, то округлению подвергнется второе число справа.
Результат:
Результат:
Дополнительно, если вы не заметили, то все числа, которые стоят справа от округляемого числа,все превращаются в ноль.
Онлайн уменьшение целого в меньшую сторону.
В первом поле вводим число, которое будем округлять.
Во втором поле вводим отрицательное число. Смотри выше, что означает отрицательное число при округлении(не буду повторять).
Есть два варианта округлить в меньшую сторону онлайн:
Если вы не используете кнопку “Всегда округлять в меньшую сторону”, то число будет округлено по законам, которые были озвучены выше, т.е. округляться в меньшую сторону будет в том случае, если округляемое число будет меньше 5.
Всегда округлять целое в меньшую сторону.
А если нужно округлить в меньшую сторону?
Сверху я уже написал простенький скриптик. который будет всегда округлять число в меньшую строну(при активации “Всегда округлять в меньшую сторону”).
Разберем, как работает “Всегда округлять в меньшую сторону”
Рассмотрим сам процесс округления!
Получаем первое число, которое будем округлять:
Получаем втрое число(отрицательное), какое по счету справа налево будем округлять:
Если вдруг пользователь умудрился отправить положительное число, то делаем его все равно отрицательным:
С помощью функции substr обрезаем справа.
Функция округляет целое в меньшую сторону.
Тут мне подумалось, почему, уже на готовом алгоритме не написать функцию, которая будет выполнять ту же работу.
Т.е. “Всегда округлять целое в меньшую сторону”
Назовем функцию : “round_whole_smaller”, будет два аргумента “$first,$second”
Округляем десятки:
echo round_whole_smaller(1999,2); Результат:
Округляем сотни:
echo round_whole_smaller(1999,3); Результат:
ЗАОСТРИМ НА ОКРУГЛЕНИИ
По итогам некоторой работы решил наваять небольшую статью по поводу разных методов округлений и их реализаций в PHP, Excel, OpenOffice. Думаю, эта информация может пригодиться кому-то еще 🙂
Методы округления в Excel, PHP и не только
При решении задач мат.моделирования и автоматизации бизнес-процессов очень часто возникают погрешности результата, связанные с неочевидностью выбора способов округления, используемых при написании кода.
Так, заказчик почти никогда не может явно сформулировать требования к применяемым в расчетах способам округления, и, зачастую, просто использует расчет, выполненный в Excel-е, как эталон, не задумываясь, как именно и почему именно так происходит округление в том или ином случае.
В такой ситуации полезно:
В данной статье мы расскажем о стандартных способах округления, проанализируем пакет MS Excel 2003, пакет OpenOffice Calc 2.3.0 и язык PHP на предмет имеющихся в них функций округления и их соответствия стандартным. Попутно будут предложены примеры реализаций недостающих функций.
Стандарт IEEE 754 описывает семь методов округления чисел:
Первые пять методов являются, согласно стандарту, обязательными к реализации, а последние два — опциональными.
Тестовая выборка, однозначно различающая методы
Для определения соответствия функции, реализующей округление, некоторому стандартному методу округления удобно воспользоваться специальной тестовой выборкой чисел. Предлагаемый набор из 4 чисел позволяет однозначно различить перечисленные в стандарте семь методов округления.
Рассмотрим следующую таблицу (в предположении, что округления производились до 1 знака после запятой):
Не будем проводить доказательства того, что набор из 4 чисел является минимальным для решения задачи различения методов, покажем лишь, что в данном конкретном наборе нельзя удалить ни одно из чисел:
Отметим, что данный набор чисел не может использоваться для доказательства корректности той или иной функции округления, а только для определения её типа и только в том случае, если заранее известно, что функция реализует один из 7 вышеописанных методов округления.
Анализ существующих функций округления в MS Excel 2003
Изучение и понимание отличий функций округления, доступных в MS Excel, представляется нам важной задачей, т.к. большинство расчетных прототипов, входящих в ТЗ на задачи автоматизации и моделирования, реализуются именно средствами MS Office. При этом важно понимать, что проверка корректности выполнения ТЗ обычно производится путем сверки результатов с результатами прототипа. Таким образом, умение воспроизводить результаты работы методов округления, используемых в каждом конкретном случае, является необходимыми для получения адекватных расчетных результатов.
Анализ справочника функций MS Office Excel 2003 позволяет составить следующий список стандартных функций, реализующих различные виды округления: ОКРУГЛ, ОКРВВЕРХ, ОКРВНИЗ, ОКРУГЛВВЕРХ, ОКРУГЛВНИЗ, ОТБР, ЦЕЛОЕ.
Таким образом, получаем следующие различные наборы функций:
Следовательно, пользователям MS Excel доступны 4 из 7 рассматриваемых методов округления:
Реализация недостающих методов округления в MS Excel 2003
Для реализации недостающих методов округления нам потребуется математическая функция sgn (signum). В языке формул MS Excel она реализована функцией ЗНАК.
Итак, опишем на псевдокоде, близком к языку формул MS Excel, формулы, позволяющие получить желаемые методы округления.
Данные формулы не являются единственным или наилучшим способом реализации указанных методов округления, а являются лишь иллюстрацией возможности их реализации через имеющиеся стандартные методы MS Excel.
Сравнение округлений в OpenOffice Calc 2.3.0 и в MS Excel 2003
Изучение справочника функций языка формул OpenOffice Calc позволило составить такой список функций округления: TRUNC, ROUND, ROUNDDOWN, ROUNDUP, CEILING, FLOOR, MROUND, INT. При этом функции CEILING и FLOOR имеют 2 режима, один из которых (mode=1) декларирован как режим совместимости с MS Excel.
Таким образом, OpenOffice Calc содержит больше различных функций округления, а именно функции CEILI NG и FLOOR, реализующие в режиме (mode=0) методы round_ceiling и round_floor, соответственно.
Анализ существующих функций округления в PHP
Спецификация языка PHP предлагает 4 способа округления чисел: intval, round, floor, ceil. Существуют также менее очевидные способы округления чисел в PHP путем форматирования числа в строку и преобразования его обратно в число. Для такого форматирования могут использоваться стандартные php-функции number_format и sprintf.
Поскольку функции ceil, floor и intval не позволяют указывать требуемую точность округления, для них были написаны обертки (соответственно, p_ceil, p_floor и p_intval).
Таким образом, получаем следующие различные наборы функций:
Следовательно, разработчикам на PHP доступно 4 из 7 рассматриваемых методов округления:
Кроме того, intval (и как следствие, p_intval) имеет сильные ограничения на размер значения аргумента — максимальное допустимое значение аргумента intval равно MAXINT (точное значение зависит от системы). По этой причине не рекомендуется использовать функцию intval для реализации округлений при решении расчетных задач.
Реализация недостающих методов округления в PHP
Как указывалось выше, для нормального использования функций floor и ceil потребовалось реализовать функции-обертки, позволяющие указывать точность округления (количество знаков после запятой).
Кроме того, в PHP отсутствует реализация математической функции sgn. Нам потребуется своя:
Т еперь, имея p_ceil, p_floor и round (как реализации, соответственно, round_ceiling, round_floor и round_half_up) и собственную реализацию sgn, мы можем воспроизвести недостающие методы округления следующим образом:
Данный код не является единственным или наилучшим способом реализации указанных методов округления, а являются лишь иллюстрацией возможности их реализации через имеющиеся стандартные функции PHP.
Как округлить число php
(PHP 4, PHP 5, PHP 7, PHP 8)
ceil — Округляет дробь в большую сторону
Описание
Список параметров
Значение, которое требуется округлить в большую сторону
Возвращаемые значения
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | num больше не принимает внутренние объекты, поддерживающие числовое преобразование. |
Примеры
Пример #1 Пример использования ceil()
Смотрите также
User Contributed Notes 21 notes
I needed this and couldn’t find it so I thought someone else wouldn’t have to look through a bunch of Google results-
I couldn’t find any functions to do what ceiling does while still leaving I specified number of decimal places, so I wrote a couple functions myself. round_up is like ceil but allows you to specify a number of decimal places. round_out does the same, but rounds away from zero.
Actual behaviour:
echo ceil(-0.1); //result “-0” but i expect “0”
Workaround:
echo ceil(-0.1)+0; //result “0”
Or for the terniary fans:
?>
Slightly pointless, but there you have it, in one line only..
$test_1 = ceil($test);
$test_2 = ceil($test * 10);
var_dump($test_1); // float 4
var_dump($test_2); // float 31
Ceil for decimal numbers with precision:
function ceil_dec($number,$precision,$separator)
<
$numberpart=explode($separator,$number);
$numberpart[1]=substr_replace($numberpart[1],$separator,$precision,0);
if($numberpart[0]>=0)
<$numberpart[1]=ceil($numberpart[1]);>
else
$ceil_number= array($numberpart[0],$numberpart[1]);
return implode($separator,$ceil_number);
>
echo ceil_dec(1.125,2,”.”); //1.13
echo ceil_dec(-1.3436,3,”.”); //-1.343
echo ceil_dec(102938.1,4,”.”); //102938.1
php > echo 100 * 1 * 0.07;
7
php > echo ceil(100 * 1 * 0.07);
8
Here is a navbar using the ceil function.
$k = 0.14 * 100;
echo ceil($k); // results 15
solution is in converting float number to string
Example 1.
echo ceil (“<$k>“); // results 14
useful for ‘ceil’ with precision capability
That’s not always true. round() doesn’t work that way, like zomis2k said it just rounds up _or_ down to the nearest non-decimal number. However this should work.
Note that ‘ceil’ can show unexpected behaviour when using float values due to inaccuracies in the float system and PHP tendency to freely limiting the number of digits it displays to the user.
It might like it is rounding up values that end in 0 (zero) but actually PHP is not showing that the value is not exactly the value it shows.
Here is a more accurate way to round on superior decimal.
The code below rounds a value up to a nearest multiple, away from zero. The multiple does not have to be a integer. So you could round, say, to the nearest 25.4, allowing you to round measurements in mm to the nearest inch longer.
The inline code above nests one conditional statement inside another. The value of y changes twice within the same line (three times, if you count the pre-increment). The value of each assignment is used to determine branching within the conditional statement.
How it works can more easily be seen from the expansion below:
Putting the in-line code inside the function: the difference in execution speed between myCeilingLong() and myCeilingShort() is around 1.5%.


