Sdscompany.ru

Компьютерный журнал
1 просмотров
Рейтинг статьи
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!

Читать еще:  Developer android com sdk index html

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):

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() оно должно «окрулиться» в меньшую. Код выше тому пример.

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

Читать еще:  Html table merge cells

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

спасибо
вариант с округлением по 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 ?

Округление чисел PHP

Добрый вечер друзья, сегодня мы продолжаем изучения языка PHP. Тема, которую мы сегодня изучим, называется округление чисел в PHP. Иногда в результате выполнения некоторых функций, Вы получаете результат, который не является целым числом, а перед Вами стоит задача получить целое число. Первый пример, который приходит в голову, это генерация страниц на вашем сайте. И на помощь в решении такой задачи к Вам приходят три функции: round, ceil, floor.
Поговорим о каждой функции отдельно. Первая функция round занимается округлением числа с плавающей точкой. В качестве параметров функции она может принимать просто число, которое будет округляться, а в качестве второго параметра мы можем указать число, которое будет означать количество цифр после запятой, после округления.
Вторая функция ceil, позволяет округлять дробь в большую сторону, в качестве параметра задается лишь число для дальнейшего округления.
И последняя функция floor, противоположность ceil, и занимается округлением в меньшую сторону, и также принимает один параметр. Теперь рассмотрим каждую функцию на примере.

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

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

5 последних свежих статей:

Методы alert, prompt, confirm в JavaScript

И снова я приветствую Вас в очередной теме посвященной языку JavaScript, в которой мы разберем методы alert, prompt, confrim.

Конструкция switch-case в JavaScript

Всем привет, сегодня мы рассмотрим с Вами конструкцию switch-case в языке JavaScript.

Всплывающая подсказка на CSS

Здравствуйте дорогие друзья, сегодня мы с Вами изучим еще одну тему посвященную языку CSS. И научимся реализовывать всплывающие подсказки на CSS.

Псевдокласс target в CSS

Сегодня мы рассмотрим еще одну возможность, которую предоставляет нам CSS3, а именно поговорим о псевдоклассе target, для чего он нам может быть нужен, и рассмотрим один из самых популярных способов его применения.

Как вставить видео с YouTube

Довольно часто Вы видите на различных ресурсах видео, которое хранится на сервисе youtube, но каким-то образом его можно воспроизвести на данном сайте. Об этом сегодня пойдет речь, и я расскажу Вам, как вставить видео с YouTube.

Округление до ближайшего кратного пяти в PHP

Мне нужна функция php, которая возвращает 55 при вызове ее с помощью 52.

Я уже пробовал функцию round() :

Он возвращает 90 , но я хочу 95 .

12 Ответов

Это может быть достигнуто несколькими способами, в зависимости от предпочтительного соглашения об округлении:

1. Округлить до следующего кратного 5, исключить текущее число

Поведение: 50 выходов 55, 52 выхода 55

2. Округлить до ближайшего кратного 5, включить текущее число

Поведение: 50 выходов 50, 52 выхода 55, 50.25 выходов 50

3. Округлить до целого числа, а затем до ближайшего кратного 5

Поведение: 50 выходов 50, 52 выхода 55, 50.25 выход 55

  1. Делим на 5
  2. round() (или ceil() , если вы хотите округлить всегда )
  3. Умножьте на 5.

Значение 5 (разрешение / степень детализации) может быть любым — заменит его как на шаге 1, так и на Шаге 3

Округлить до ближайшего (вверх или вниз):

Попробуйте эту маленькую функцию, которую я написал.

Я знаю, что это старый вопрос, но IMHO использование оператора модуля-лучший способ, и гораздо более элегантный, чем принятый ответ.

Читать еще:  Узнать количество элементов в массиве php

Умножьте на 2, округлите до -1, разделите на 2.

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

Я попробовал функции от Найта, Мустафы и даже предложение от Праесага . Они не поддерживают плавающие числа, и решения из & Praesagus Мустафы не работают правильно в некоторых числах. Попробуйте следующие тестовые числа и сделайте сравнение самостоятельно:

Я делаю это вот так:

Я просто написал эту функцию за 20 минут, основываясь на многих результатах, которые я нашел здесь и там, я не знаю, почему она работает и как она работает!! :Д

Меня в основном интересовала конвертация номеров валют из этого 151431.1 LBP в 150000.0 LBP. (151431.1 LBP ==

100 USD) который работает отлично до сих пор, однако я пытался сделать его каким-то образом совместимым с другими валютами и числами, но не уверен, что он работает нормально!!

Не стесняйтесь изменять его и исправлять, если что-то не так

Вероятно, вы также можете рассмотреть этот лайнер. Это быстрее! Работает для $num >= 0 и $factor > 0 .

Похожие вопросы:

У меня есть сетка, нарисованная на холсте, когда пользователь нажимает на сетку, я рисую прямоугольник. Я хочу всегда рисовать прямоугольник поверх ячейки сетки, на которую нажимает пользователь.

Возможный Дубликат : Круглое число до ближайшего кратного 3 Мне нужен вызов javascript, который округлит числа до ближайшего кратного 12. Примеры: 1 — > 12 7 -> 12 14 — > 24 27 — > 36 Кто-нибудь.

Я пытаюсь написать функцию Javascript, округляющую до ближайшего кратного 5. Но вы только округляете, если разница между переменной и округлением до кратного 5 меньше 3. (таким образом, 53.

Как округлить значение float до ближайшего кратного n? Например, округление 21.673 до ближайшего кратного 8 должно привести к 24. И, округление 21.673 до ближайшего кратного 4 должно привести к 20.

У меня был очень простой вопрос. Я делаю систему обзора, и я хочу, чтобы оценки были округлены до ближайшего кратного 0.5 Так что я имею в виду: 0 / 0.5 / 1 / 1.5 / 2 / 2.5 /. . Каков наилучший.

Мне нужно округлить число (вход гарантированно будет целым числом & является положительным) до следующего кратного 5. Я попробовал это: int round = ((grades[j] + 2)/5) * 5; Однако это округляет.

Есть ли функция в Python, которая позволяет мне округлить до ближайшего кратного целого числа? round_down(19,10)=10 round_down(19,5)=15 round_down(10,10)=10 Я добросовестно посмотрел на SO и не.

Кто-нибудь знает, как округлить число до ближайшего кратного 5? Я нашел алгоритм, чтобы округлить его до ближайшего кратного 10, но я не могу найти этот. Это делает его за десять. double number =.

У меня есть число, которое я хочу округлить до ближайшего кратного X со смещением . Например, как бы я округлил число до ближайшего числа, которое на 5 больше , чем кратно 12 (т. е. 5, 17, 29. )?

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

Профиль
Группа: Участник
Сообщений: 42
Регистрация: 26.4.2005
Где: Spb

Репутация: нет
Всего: нет

Панда-бир!

Профиль
Группа: Модератор
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73

Один из розовых плюшевых-всадников апокалипсиса. очень злой.

Профиль
Группа: Участник
Сообщений: 42
Регистрация: 26.4.2005
Где: Spb

Репутация: нет
Всего: нет

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET
  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь
  • Темы «ищу скрипт», «подскажите скрипт» и т.п. будут переноситься в форум «Web-технологии»
  • Темы с именами: «Срочно», «помогите», «не знаю как делать» будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, [email protected] , skyboy, SamDark, MoLeX, awers.

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