Kwert-soft.ru

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

Php округление до десятых

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)

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

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

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

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

Читать еще:  Energy report html

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

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

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

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

(PHP 4, PHP 5, PHP 7)

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

Описание

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

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

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

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

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

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

КонстантаОписание
PHP_ROUND_HALF_UPОкругляет val в большую сторону от нуля до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 2 и -1.5 в -2.
PHP_ROUND_HALF_DOWNОкругляет val в меньшую сторону к нулю до precision десятичных знаков, если следующий знак находится посередине. Т.е. округляет 1.5 в 1 и -1.5 в -1.
PHP_ROUND_HALF_EVENОкругляет val до precision десятичных знаков в сторону ближайшего четного знака.
PHP_ROUND_HALF_ODDОкругляет val до precision десятичных знаков в сторону ближайшего нечетного знака.

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

Примеры

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

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

echo round ( 9.5 , 0 , PHP_ROUND_HALF_UP ); // 10
echo round ( 9.5 , 0 , PHP_ROUND_HALF_DOWN ); // 9
echo round ( 9.5 , 0 , PHP_ROUND_HALF_EVEN ); // 10
echo round ( 9.5 , 0 , PHP_ROUND_HALF_ODD ); // 9

echo round ( 8.5 , 0 , PHP_ROUND_HALF_UP ); // 9
echo round ( 8.5 , 0 , PHP_ROUND_HALF_DOWN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_EVEN ); // 8
echo round ( 8.5 , 0 , PHP_ROUND_HALF_ODD ); // 9
?>

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

/* Использование PHP_ROUND_HALF_UP с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_UP ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_UP ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_UP ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_UP ); // -1.5

/* Использование PHP_ROUND_HALF_DOWN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_DOWN ); // -1.5

/* Использование PHP_ROUND_HALF_EVEN с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // 1.6
echo round ( 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_EVEN ); // -1.6
echo round (- 1.54 , 1 , PHP_ROUND_HALF_EVEN ); // -1.5

/* Использование PHP_ROUND_HALF_ODD с точностью до 1 знака */
echo round ( 1.55 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round ( 1.54 , 1 , PHP_ROUND_HALF_ODD ); // 1.5
echo round (- 1.55 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
echo round (- 1.54 , 1 , PHP_ROUND_HALF_ODD ); // -1.5
?>

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

ВерсияОписание
5.3.0Был добавлен параметр mode .
5.2.7Работа функции round() была изменена в соответствии со стандартом C99.

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

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

round

(PHP 4, PHP 5, PHP 7)

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

Описание

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

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

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

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

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

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

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

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

КонстантыОписание
PHP_ROUND_HALF_UPОкругляет val в большую сторону от нуля до precision десятичных знаков, если следующий знак находится посередине. То есть округляет 1.5 в 2 и -1.5 в -2.
PHP_ROUND_HALF_DOWNОкругляет val в меньшую сторону к нулю до precision десятичных знаков, если следующий знак находится посередине. То есть округляет 1.5 в 1 и -1.5 в -1.
PHP_ROUND_HALF_EVENОкругляет val до precision десятичных знаков в сторону ближайшего четного знака.
PHP_ROUND_HALF_ODDОкругляет val до precision десятичных знаков в сторону ближайшего нечетного знака.

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

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

Примеры

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

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

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

var_dump ( round ( $number , 2 ));
var_dump ( round ( $number , 1 ));
var_dump ( round ( $number , 0 ));
var_dump ( round ( $number , — 1 ));
var_dump ( round ( $number , — 2 ));
var_dump ( round ( $number , — 3 ));
var_dump ( round ( $number , — 4 ));
?>

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

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

echo ‘Rounding modes with 9.5’ . PHP_EOL ;
var_dump ( round ( 9.5 , 0 , PHP_ROUND_HALF_UP ));
var_dump ( round ( 9.5 , 0 , PHP_ROUND_HALF_DOWN ));
var_dump ( round ( 9.5 , 0 , PHP_ROUND_HALF_EVEN ));
var_dump ( round ( 9.5 , 0 , PHP_ROUND_HALF_ODD ));

echo ‘Rounding modes with 8.5’ . PHP_EOL ;
var_dump ( round ( 8.5 , 0 , PHP_ROUND_HALF_UP ));
var_dump ( round ( 8.5 , 0 , PHP_ROUND_HALF_DOWN ));
var_dump ( round ( 8.5 , 0 , PHP_ROUND_HALF_EVEN ));
var_dump ( round ( 8.5 , 0 , PHP_ROUND_HALF_ODD ));
?>

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

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

echo ‘Использование PHP_ROUND_HALF_UP с точностью до 1 знака’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_UP ));
var_dump ( round ( 1.54 , 1 , PHP_ROUND_HALF_UP ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_UP ));
var_dump ( round (- 1.54 , 1 , PHP_ROUND_HALF_UP ));

echo PHP_EOL ;
echo ‘Использование PHP_ROUND_HALF_DOWN с точностью до 1 знака’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_DOWN ));
var_dump ( round ( 1.54 , 1 , PHP_ROUND_HALF_DOWN ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_DOWN ));
var_dump ( round (- 1.54 , 1 , PHP_ROUND_HALF_DOWN ));

echo PHP_EOL ;
echo ‘Использование PHP_ROUND_HALF_EVEN с точностью до 1 знака’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_EVEN ));
var_dump ( round ( 1.54 , 1 , PHP_ROUND_HALF_EVEN ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_EVEN ));
var_dump ( round (- 1.54 , 1 , PHP_ROUND_HALF_EVEN ));

echo PHP_EOL ;
echo ‘Использование PHP_ROUND_HALF_ODD с точностью до 1 знака’ . PHP_EOL ;
var_dump ( round ( 1.55 , 1 , PHP_ROUND_HALF_ODD ));
var_dump ( round ( 1.54 , 1 , PHP_ROUND_HALF_ODD ));
var_dump ( round (- 1.55 , 1 , PHP_ROUND_HALF_ODD ));
var_dump ( round (- 1.54 , 1 , PHP_ROUND_HALF_ODD ));
?>

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