Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php как изменить округлять числа

round

(PHP 4, PHP 5, PHP 7)

round — Округляет число типа float

Описание

Возвращает округлённое значение val с указанной точностью precision (количество цифр после запятой). precision может быть отрицательным или нулём (по умолчанию).

Замечание: PHP по умолчанию не может правильно обрабатывать строки типа «12,300.2». Более подробно читайте в разделе Преобразование строк в числа.

Список параметров

Значение для округления.

Количество десятичных знаков, до которых производится округление

Если precision положительный, округление будет производиться справа от запятой.

Если precision отрицателен, округление будет производиться слева от запятой. Если абсолютное значение precision больше или равно количеству цифр, результат округления будет равен

Используйте одну из этих констант для задания способа округления.

Возвращаемые значения

Значение округляется до заданного значения precision как float .

Примеры

Пример #1 Пример использования round()

Результат выполнения данного примера:

Пример #2 Как параметр precision влияет на числа с плавющей запятой

Результат выполнения данного примера:

Пример #3 Примеры использования параметра mode

Результат выполнения данного примера:

Пример #4 Примеры использования параметра mode с указанием точности precision

Результат выполнения данного примера:

Список изменений

Смотрите также

  • ceil() — Округляет дробь в большую сторону
  • floor() — Округляет дробь в меньшую сторону
  • number_format() — Форматирует число с разделением групп

User Contributed Notes 32 notes

In my opinion this function lacks two flags:

— PHP_ROUND_UP — Always round up.
— PHP_ROUND_DOWN — Always round down.

In accounting, it’s often necessary to always round up, or down to a precision of thousandths.

As PHP doesn’t have a a native number truncate function, this is my solution — a function that can be usefull if you need truncate instead round a number.

truncate(-1.49999, 2); // returns -1.49
* truncate(.49999, 3); // returns 0.499
*
* @param float $val Float number to be truncate
* @param int f Number of precision
* @return float
*/
function truncate ( $val , $f = «0» )
<
if(( $p = strpos ( $val , ‘.’ )) !== false ) <
$val = floatval ( substr ( $val , 0 , $p + 1 + $f ));
>
return $val ;
>
?>

If you have negative zero and you need return positive number simple add +0:

$number = -2.38419e-07;
var_dump(round($number,1));//float(-0)
var_dump(round($number,1) + 0);//float(0)

I discovered that under some conditions you can get rounding errors with round when converting the number to a string afterwards.

To fix this I swapped round() for number_format().

Unfortunately i cant give an example (because the number cant be represented as a string !)

essentially I had round(0.688888889,2);

which would stay as 0.68888889 when printed as a string.

But using number_format it correctly became 0.69.

If you’d only want to round for displaying variables (not for calculating on the rounded result) then you should use printf with the float:

This returns: 3.40 .

echo mround(34.89999); //34.90

Please note that the format of this functions output also depends on your locale settings. For example, if you have set your locale to some country that uses commas to separate decimal places, the output of this function also uses commas instead of dots.

This might be a problem when you are feeding the rounded float number into a database, which requires you to separate decimal places with dots.

See it in action:

The output will be:
3.56
3,56

Here is function that rounds to a specified increment, but always up. I had to use it for price adjustment that always went up to $5 increments.

Here’s a function to round to an arbitary number of significant digits. Don’t confuse it with rounding to a negative precision — that counts back from the decimal point, this function counts forward from the Most Significant Digit.

Works on negative numbers too. $sigdigs should be >= 0

= 1 ) <
$number /= 10 ;
$multiplier *= 10 ;
>
return round ( $number , $sigdigs ) * $multiplier ;
>
?>

this function (as all mathematical operators) takes care of the setlocale setting, resulting in some weirdness when using the result where the english math notation is expected, as the printout of the result in a width: style attribute!

Unexpected result or misunderstanding (php v5.5.9)

Excel-like ROUNDUP function:

public static function round_up($value, $places)
<
$mult = pow(10, abs($places));
return $places

This function will let you round to an arbitrary non-zero number. Zero of course causes a division by zero.

round() will sometimes return E notation when rounding a float when the amount is small enough — see https://bugs.php.net/bug.php?id=44223 . Apparently it’s a feature.

To work around this «feature» when converting to a string, surround your round statement with an sprintf:

sprintf(«%.10f», round( $amountToBeRounded, 10));

When you have a deal with money like dollars, you need to display it under this condition:
-format all number with two digit decimal for cents.
-divide 1000 by ,
-round half down for number with more than two decimal

I approach it using round function inside the number_format function:

number_format((float)round( 625.371 ,2, PHP_ROUND_HALF_DOWN),2,’.’,’,’) // 625.37
number_format((float)round( 625.379 ,2, PHP_ROUND_HALF_DOWN),2,’.’,’,’) // 625.38
number_format((float)round( 1211.20 ,2, PHP_ROUND_HALF_DOWN),2,’.’,’,’) // 1,211.20
number_format((float)round( 625 ,2, PHP_ROUND_HALF_DOWN),2,’.’,’,’) // 625.00

Okay, final version of my function:

function NumberPrecision($n, $precision=0, $is_round=true)
<
if ($is_round)
<
$r = 5 * pow(10, -($precision+1));
$n += (($n 0) ? -$r : $r);
$n = number_format($n, $precision+1, $comma, »);

$n .= $comma;
list($n, $frac) = explode($comma, $n, 2);
$n = rtrim(rtrim($n, $comma) . $comma . substr($frac, 0, $precision), $comma);
return ($n);
>

It can be useful in come cases when built-in function like round() or number_format() returns unexpected results. Works with positive and negative numbers, zero, numbers like 1/12, 0.3, numbers in scientific notation etc.

Solving round_down() problem:
——————————
Use of fails in some cases, e.g. round_down(2.05, 2) gives incorrect 2.04.
Here is a «string» solution (https://stackoverflow.com/a/26491492/1245149) of the problem (a negative precision is not covered):

Solving round_up() problem:
—————————
Use of fails in some cases, e.g. round_up(2.22, 2) gives incorrect 2.23 (https://stackoverflow.com/a/8239620/1245149).
Adapting the above round_down() «string» solution I have got this result (a negative precision is not covered):

Читать еще:  Gildiamasterov ru progs projects php

I don’t know it is bulletproof, but at least it removes the above mentioned fail. I have done no binary-to-decimal-math-analysis but if `$floorValue + pow(10, 0 — $precision)` works
always as expected then it should be ok.

WEB IT blog

Блог про веб-разработку, администрирование, дизайн

PHP, округление до десятков и сотен в большую сторону

четверг, 10 ноября 2011 г.

Чтобы цена товара в интернет-магазине не была отпугивающей для посетителя, иногда нужно округлить её до целых десятков. Например, 113 руб до 120 руб, 458 руб до 460 руб.
В PHP есть готовые функции округления ceil и round, но в исходном виде для текущей задачи они не совсем подходят.
Так что кусочек простого и понятного кода вам в помощь:

если 10 сменить на 100, то получим округление до сотен и цена 112.12 превратится в 200 рублей.

19 коммент.:

Да без проблем ) Всегда рад.

Супер! СПасибо! Очень долго искал!

Вариант, если нужно округление например по 5, а не по 10.

$p = 112.12; // 112 рублей 12 копеек
$t_p=ceil($p/10) * 10;// 120 рублей ровно
$p=($t_p-$p)>=5?$t_p-5:$t_p;
echo $p; // 115 рублей ровно

Александр, спасибо за вариант!

Вы плохо читали описание функции round.
Вот пример из описания функции, по ссылке из вашей статьи:
echo round(1241757, -3); // 1242000

Соответственно для округления до сотен надо использовать -2, до десятков -1.

Basyanya, это вы плохо читали документацию. Задача стоит — «округлить до десятков и сотен в большую сторону».
Теперь специально для вас:
echo round(112.12, -1); // 110
echo round(115.12, -1); // 120
echo round(112.12, -2); // 100
echo round(152.12, -2); // 200

Все нормальные программисты знают как работает round и ceil, но задача в посте была округлить в большую сторону даже если по логике round() оно должно «окрулиться» в меньшую. Код выше тому пример.

Спасибо за ваше решение данной проблемы!

Отличное решение. Спасибо большое.

спасибо
вариант с округлением по 5 знак меньше $p=($t_p-$p) 25 ноября 2014 г., 11:08

извиняюсь. ) со знаком все верно!
$p=($t_p-$p)>=5?$t_p-5:$t_p;

а в корзину все равно при таком подходе товары будут ложится с ценой 133 и т.д. ((((

Алексей, так округляйте цену при записи товара в базу, никаких проблем.

так и делаю. Жаль что нельзя как-то через маску в настройках валюты

Выручили! Единственный сайт где готовое решение есть, а не целый свиток теории и предположений 🙂

хорошее решение спасибо!

Вариант, с округление по 5. Почему не ceil($price/5)*5 ?

Округление числа в Excel

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

Изменение количества знаков после запятой без изменения значения

На листе

Выделите ячейки, формат которых требуется изменить.

Чтобы после запятой отображалось больше или меньше знаков, на вкладке Главная в группе Число нажмите кнопку Увеличить разрядность или Уменьшить разрядность .

Во встроенном числовом формате

На вкладке Главная в группе Число щелкните стрелку рядом со списком числовых форматов и выберите пункт Другие числовые форматы.

В списке Категория выберите значение Денежный, Финансовый, Процентный или Экспоненциальный в зависимости от типа данных.

В поле Число десятичных знаков введите требуемое число знаков после запятой.

Округление числа вверх

Используйте функцию ОКРУГЛВВЕРХ. В некоторых случаях может потребоваться использовать функции ЧЁТН и НЕЧЁТ для округления вверх до ближайшего четного или нечетного числа.

Округление числа вниз

Округление числа до ближайшего значения

Округление числа до ближайшего дробного значения

Округление числа до указанного количества значимых разрядов

Значимые разряды — это разряды, которые влияют на точность числа.

В примерах этого раздела используются функции ОКРУГЛ, ОКРУГЛВВЕРХ и ОКРУГЛВНИЗ. Они показывают способы округления положительных, отрицательных, целых и дробных чисел, но приведенные примеры охватывают лишь небольшую часть возможных ситуаций.

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

Округляемые отрицательные числа прежде всего преобразуются в абсолютные значения (значения без знака «минус»). После округления знак «минус» применяется повторно. Хотя это может показаться нелогичным, именно так выполняется округление. Например, при использовании функции ОКРУГЛВНИЗ для округления числа -889 до двух значимых разрядов результатом является число -880. Сначала -889 преобразуется в абсолютное значение (889). Затем это значение округляется до двух значимых разрядов (880). После этого повторно применяется знак «минус», что дает в результате -880.

При применении к положительному числу функции ОКРУГЛВНИЗ оно всегда округляется вниз, а при применении функции ОКРУГЛВВЕРХ — вверх.

Функция ОКРУГЛ округляет дробные числа следующим образом: если дробная часть больше или равна 0,5, число округляется вверх. Если дробная часть меньше 0,5, число округляется вниз.

Функция ОКРУГЛ округляет целые числа вверх или вниз аналогичным образом, при этом вместо делителя 0,5 используется 5.

В общем при округлении числа без дробной части (целого числа) необходимо вычесть длину числа из нужного количества значимых разрядов. Например, чтобы округлить 2345678 вниз до 3 значимых разрядов, используется функция ОКРУГЛВНИЗ с параметром -4: = ОКРУГЛВНИЗ(2345678,-4). При этом число округляется до значения 2340000, где часть «234» представляет собой значимые разряды.

Читать еще:  Структура языка php

Округление числа до заданного кратного

Иногда может потребоваться округлить значение до кратного заданному числу. Например, допустим, что компания поставляет товары в ящиках по 18 единиц. С помощью функции ОКРУГЛТ можно определить, сколько ящиков потребуется для поставки 204 единиц товара. В данном случае ответом является 12, так как число 204 при делении на 18 дает значение 11,333, которое необходимо округлить вверх. В 12-м ящике будет только 6 единиц товара.

Может также потребоваться округлить отрицательное значение до кратного отрицательному или дробное — до кратного дробному. Для этого также можно применять функцию ОКРУГЛТ.

Полезные PHP коды — для новичков

При написании кода в PHP есть задачи, которые встречаются чаще остальных или просто как-то выделяются из общего множества. В этой статье поговорим о некоторых из них.

Тут собрана лишь малая часть, и наверное это не последняя статья на тему несложных популярных задачек в PHP. Кроме того, я планирую дополнять эту статью.

В общем, не буду никого ни за что тянуть и перейду сразу к кодам, которые, я надеюсь, будут полезны новичкам: кто что для себя найдет — все ваше

Короткая запись операторов присваивания

Когда нужно что-то прибавить, отнять или объединить, то для краткости можно использовать сокращения в операторе = — операторе присваивания:

Время выполнения PHP скрипта

Замерить скорость выполнения всего PHP кода или какой-то отдельной его части, можно с помощью встроенной в PHP функции microtime(true) . Функция вернет UNIX штамп времени в микросекундах. Параметр true «говорит» функции вернуть число, а не строку, чтобы можно было потом просто отнять одно число от другого.

Логика проста: сначала замеряем текущее время в микросекундах, затем выполняем код, опять замеряем текущее время и высчитываем разницу во времени — эта разница и будет временем выполнения кода. С помощью функции sprintf() форматируем полученную разницу в читаемый формат.

Округление дробных чисел

Округление до целых

Чтобы округлить число в php существует несколько функций:

round($num) — округляет число в большую или меньшую сторону в зависимости от значения дробной части. Если дробная часть больше или равна пяти, то округлит в большую сторону, иначе в меньшую.

ceil($num) — независимо от дробной части, округляет в большую сторону.

  • floor($num) — независимо от дробной части, округляет в меньшую сторону.
  • Округление до дробных

    Для округления чисел, до определенного количество знаков после запятой, используем функцию round() . Во втором параметре нужно указать сколько оставить знаков после запятой.

    Округление последнего числа происходит как в математики: если следующее больше или равно 5 то в большую сторону, в остальных случаях в меньшую.

    Целая часть и остаток от деления чисел

    Чтобы получить целую часть от деления можно воспользоваться функцией intval() или префиксом (int) .

    Чтобы получить остаток от деления можно воспользоваться оператором % :

    Четное число или нет — проверка в PHP (остаток от деления)

    Чтобы узнать четное число или нет, нужно разделить его на 2 и проверить нет ли остатка. А для определения остатка от деления используется арифметический оператор — % .

    Числа кратные к N или каждый N-ый блок в цикле

    Нужно разделить число на число и если остатка нет, то первое число делиться нацело на второе, а значит кратное.

    Где применить эту кратность?

    Допустим, есть цикл записей и нужно к каждому третьему блоку добавить отдельный css класс. Тут-то кратность нам и поможет.

    Форматирование чисел (денег) в PHP

    Для удобного восприятия числа или денежные велечины, лучше выводить с разеделением тысячных групп. Например 9864 понятнее смотрится так: 9 864 . Для такого форматирования в PHP есть готовые фукнции:

    number_format( $number, $decimals = 0 ) number_format( $number, $decimals = 0, $dec_point = ‘.’ , $thousands_sep = ‘,’ )

    Форматирует число с разделением групп.

    number (обязательный)
    Число, которое нужно отформатировать.

    decimals
    Сколько знаков после запятой показывать.

    dec_point
    Разделитель для дробной части.

  • thousands_sep
    Разделитель тысяч.
  • Для форматирования с учетом языка сайта в WordPress есть специальная функция number_format_i18n()

    Для вывода денежных величин используйте похожую функцию money_format()

    Как получить ключи или значения ассоциативного PHP массива

    Чтобы получить только ключи или только значения ассоциативного массива можно воспользоваться двумя php функциями: array_keys() и array_values() . Они возвращают простой индексный массив, содержащие все ключи или значения соответственно.

    Это может пригодится когда нужно сделать поиск по ключам массива. В PHP такой встроенной функции нет.

    Создаем массив из диапазона чисел или букв

    Допустим, нужно заполнить пустой массив элементами: числами от 1 до 5 или буквами от a до f .

    На такой случай в php есть функция range( $start, $end, $step = 1 ) . Она принимает два обязательных и один не обязательный параметр. Обязательные, указывают диапазон, из которого будет заполнен массив, а необязательный определяет шаг между элементами.

    Как получить максимальное или минимальное число из массива в PHP

    Для определения максимального и минимального числа в php есть две удобные функции: min() и max() . Они могут принимать любое количество чисел и возвращать минимальное или максимально из них.

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

    Как получить часть строки (подстроку)

    Чтобы получить подстроку можно использовать: substr() , iconv_substr() или mb_substr() .

    Все эти функции одинаковые, если нужно обрабатывать латиницу. А отличия начинаются когда нужно обработать например кириллицу или другой язык, тут подходят только: mb_substr() и iconv_substr() , потому что в них можно указать кодировку и они работают с символами в указанной кодировке.

    Однако нужно знать, что скорость их работы в разы ниже: substr() работает с одинаковой скоростью для строки любой длинны. А вот mb_substr() и iconv_substr() работают тем медленнее чем длине строка в них указывается. В среднем они в 5-10 раз медленнее, однако альтернатив нет, если нужно обработать кириллицу, придется использовать их.

    Количество символов в строке

    Чтобы посчитать количество символов в строке есть три функции: strlen() , mb_strlen() и iconv_strlen() . Первая это родная функция PHP и она будет правильно работать только для латиницы. Две другие функции работают на основе подключаемого расширения для PHP и нужны для подсчета кириллицы или других языков. В них можно указать кодировку строки.

    Читать еще:  Php if два условия

    Как посчитать сколько раз встречается одна строка в другой

    Чтобы получить количество подстрок входящих в другую строку, можно воспользоваться двумя функциями: substr_count() и mb_substr_count() — для кириллицы.

    Удаление символов внутри строки

    Сделать это можно многими способами, но самый простой это функция str_replace() :

    Удаление символов на концах строки

    Чтобы прочистить концы строки от пробелов, табов и переносов есть функция trim() . Но не все знают что этой функции можно передать второй параметр, чтобы удалить с концов строки указанный символ.

    Также, не все знают что есть аналогичные функции:

    • rtrim() — удаляет только справа строки
    • ltrim() — удаляет только слева строки
    Удаление пустых символов на концах строки
    Удаление указанных символов в начале и конце строки

    Как перевернуть строку в PHP

    Для вывода строки в обратном (реверсивном) порядке есть функция strrev() . Но, как и многие функции она не умеет работать с кириллицей. Альтернативных функций, вроде mb_strlen() нет. Поэтому давайте создадим свою:

    День недели и месяц по-русски на PHP

    В php, функция date() , умеет выводить дату и время в огромном количестве форматов, но, к сожалению, вывод по-русски не предусмотрен. Поэтому для вывода дня недели или месяца по-русски, необходимо написать свою функцию.

    Месяц по-русски

    День недели

    Есть что добавить? Милости прошу в комментарии.

    Округление чисел в Microsoft Excel

    Редактор таблиц Microsoft Excel широко применяется для выполнения разного рода вычислений. В зависимости от того, какая именно задача стоит перед пользователем, меняются как условия выполнения задачи, так и требования к получаемому результату. Как известно, выполняя расчёты, очень часто в результате получаются дробные, нецелые значения, что в одних случаях хорошо, а в других, наоборот, неудобно. В этой статье подробно рассмотрим, как округлить или убрать округление чисел в Excel. Давайте разбираться. Поехали!

    Для удаления дробных значений применяют специальные формулы

    О существовании специальной функции округления в Экселе знают далеко не все пользователи. Случается, что некоторые из них ошибочно принимают формат значений, то есть отображаемое количество знаков после запятой, за округление. Далее в статье разберёмся, что к чему и как всё делается.

    Для начала отметим, что функция «Формат числа» применяется в случаях, когда вид числа необходимо сделать более удобным для чтения. Кликните правой кнопкой мыши и выберите в списке пункт «Формат ячеек». На вкладке «Числовой» установите количество видимых знаков в соответствующем поле.

    Но в Excel реализована отдельная функция, позволяющая выполнять настоящее округление по математическим правилам. Для этого вам понадобится поработать с полем для формул. Например, вам нужно округлить значение, содержащееся в ячейке с адресом A2 так, чтобы после запятой остался только один знак. В таком случае функция будет иметь такой вид (без кавычек): «=ОКРУГЛ(A2;1)».

    Принцип прост и понятен. Вместо адреса ячейки вы можете сразу указать само число. Бывают случаи, когда возникает необходимость округлить до тысяч, миллионов и больше. Например, если нужно сделать из 233123 — 233000. Как же быть в таком случае? Принцип тут такой же, как было описано выше, с той разницей, что цифру, отвечающую за количество разделов, которые необходимо округлить, нужно написать со знаком «-» (минус). Выглядит это так: «=ОКРУГЛ(233123;-3)». В результате вы получите число 233000.

    Если требуется округлить число в меньшую либо в большую сторону (без учёта того, к какой стороне ближе), то воспользуйтесь функциями «ОКРУГЛВНИЗ» и «ОКРУГЛВВЕРХ». Вызовите окно «Вставка функции». В пункте «Категория» выберите «Математические» и в списке ниже вы найдёте «ОКРУГЛВНИЗ» и «ОКРУГЛВВЕРХ».

    Ещё в Excel реализована очень полезная функция «ОКРУГЛТ». Её идея в том, что она позволяет выполнить округление до требуемого разряда и кратности. Принцип такой же, как и в предыдущих случаях, только вместо количества разделов указывается цифра, на которую будет заканчиваться полученное число.

    В последних версиях программы реализованы функции «ОКРВВЕРХ.МАТ» и «ОКРВНИЗ.МАТ». Они могут пригодиться, если нужно принудительно выполнить округление в какую-либо сторону с указанной точностью.

    Как вариант, решить проблему можно при помощи функции «ЦЕЛОЕ», принцип которой заключается в том, что дробная часть просто отбрасывается, округляя вниз.

    Иногда программа автоматически округляет полученные значения. Отключить это не получится, но исправить ситуацию можно при помощи кнопки «Увеличить разрядность». Кликайте по ней, пока значение не приобретёт нужный вам вид.

    Теперь, когда вы разбираетесь, как выполнять округление числа, вам будет проще выполнять ряд задач в программе. Кроме того, эти навыки помогут вам и в решении повседневных вопросов, связанных с расчётами.

    Если Excel округляет длинные числа

    Если вы вставите в числовую ячейку длинное число с более, чем 15 разрядов, то Excel округлит его и выдаст нечто совсем непригодное. Например, число 893800399000003570 он покажет в виде 8,938E+17, а если по нему кликнуть, покажет его, как 893800399000003000. Здесь мы видим потерю последних трёх разрядов, что совершенно неприемлемо.

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

    Однако при преобразовании таких строчных записей в число Excel снова округляет все разряды больше 15-ти. Поэтому такой способ подходит лишь для представления больших чисел в таблице, а для вычислений они всё равно должны преобразовываться с потерями. Сделать с этим ничего нельзя – Excel так устроен, и 15 разрядов – предельная его точность, с которой можно записывать числа в таблице.

    Пишите в комментариях были ли статья полезной для вас и продолжайте совершенствовать навыки работы в Microsoft Excel.

    Ссылка на основную публикацию
    Adblock
    detector