round

(PHP 4, PHP 5, PHP 7)

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

Описание

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

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

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

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

val

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

precision

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

mode

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

Константа Описание
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()

<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.60);      // 4
echo round(1.955832);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.0452);    // 5.05
echo round(5.0552);    // 5.06
?>

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

<?php
echo round(9.50PHP_ROUND_HALF_UP);   // 10
echo round(9.50PHP_ROUND_HALF_DOWN); // 9
echo round(9.50PHP_ROUND_HALF_EVEN); // 10
echo round(9.50PHP_ROUND_HALF_ODD);  // 9

echo round(8.50PHP_ROUND_HALF_UP);   // 9
echo round(8.50PHP_ROUND_HALF_DOWN); // 8
echo round(8.50PHP_ROUND_HALF_EVEN); // 8
echo round(8.50PHP_ROUND_HALF_ODD);  // 9
?>

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

<?php
/* Использование PHP_ROUND_HALF_UP с точностью до 1 знака */
echo round1.551PHP_ROUND_HALF_UP);   //  1.6
echo round1.541PHP_ROUND_HALF_UP);   //  1.5
echo round(-1.551PHP_ROUND_HALF_UP);   // -1.6
echo round(-1.541PHP_ROUND_HALF_UP);   // -1.5

/* Использование PHP_ROUND_HALF_DOWN с точностью до 1 знака */
echo round1.551PHP_ROUND_HALF_DOWN); //  1.5
echo round1.541PHP_ROUND_HALF_DOWN); //  1.5
echo round(-1.551PHP_ROUND_HALF_DOWN); // -1.5
echo round(-1.541PHP_ROUND_HALF_DOWN); // -1.5

/* Использование PHP_ROUND_HALF_EVEN с точностью до 1 знака */
echo round1.551PHP_ROUND_HALF_EVEN); //  1.6
echo round1.541PHP_ROUND_HALF_EVEN); //  1.5
echo round(-1.551PHP_ROUND_HALF_EVEN); // -1.6
echo round(-1.541PHP_ROUND_HALF_EVEN); // -1.5

/* Использование PHP_ROUND_HALF_ODD с точностью до 1 знака */
echo round1.551PHP_ROUND_HALF_ODD);  //  1.5
echo round1.541PHP_ROUND_HALF_ODD);  //  1.5
echo round(-1.551PHP_ROUND_HALF_ODD);  // -1.5
echo round(-1.541PHP_ROUND_HALF_ODD);  // -1.5
?>

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

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

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

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

Коментарии

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:

<?php printf ("%6.2f",3.39532); ?>

This returns: 3.40 .
2000-05-15 21:51:00
http://php5.kiev.ua/manual/ru/function.round.html
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.

ex:

<?php
round
(1241757, -3); // 1242000
RoundSigDigs(12417573); // 1240000
?>

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

<?php
function RoundSigDigs($number$sigdigs) {
   
$multiplier 1;
    while (
$number 0.1) {
       
$number *= 10;
       
$multiplier /= 10;
    }
    while (
$number >= 1) {
       
$number /= 10;
       
$multiplier *= 10;
    }
    return 
round($number$sigdigs) * $multiplier;
}
?>
2002-08-14 17:15:13
http://php5.kiev.ua/manual/ru/function.round.html
This function will let you round to an arbitrary non-zero number.  Zero of course causes a division by zero.

<?php
function roundTo($number$to){
    return 
round($number/$to0)* $to;
}

echo 
roundTo(87.2320); //80
echo roundTo(-87.2320); //-80
echo roundTo(87.23.25); //87.25
echo roundTo(.23.25); //.25
?>
2009-09-25 09:42:12
http://php5.kiev.ua/manual/ru/function.round.html
Автор:
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.

<?php 
function roundUpTo($number$increments) {
   
$increments $increments;
    return (
ceil($number $increments) / $increments);
}
?>
2010-10-07 19:07:58
http://php5.kiev.ua/manual/ru/function.round.html
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!

<?php
$a
=3/4;
echo 
round($a2); // 0.75

setlocale(LC_ALL'it_IT@euro''it_IT''it');
$b=3/4;
echo 
round($b,2); // 0,75
?>
2011-09-15 04:24:11
http://php5.kiev.ua/manual/ru/function.round.html
Автор:
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));
2012-07-12 14:16:41
http://php5.kiev.ua/manual/ru/function.round.html
function mround($val, $f=2, $d=6){
    return sprintf("%".$d.".".$f."f", $val);
}

echo mround(34.89999);  //34.90
2013-12-17 15:34:47
http://php5.kiev.ua/manual/ru/function.round.html
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.
2014-01-13 13:28:19
http://php5.kiev.ua/manual/ru/function.round.html
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.

<?php
function round_up($number$precision 2)
{
   
$fig = (int) str_pad('1'$precision'0');
    return (
ceil($number $fig) / $fig);
}

function 
round_down($number$precision 2)
{
   
$fig = (int) str_pad('1'$precision'0');
    return (
floor($number $fig) / $fig);
}
?>
2014-03-07 17:00:21
http://php5.kiev.ua/manual/ru/function.round.html
Unexpected result or misunderstanding (php v5.5.9)

<?php

echo round(1.551PHP_ROUND_HALF_DOWN); // 1.5
echo round(1.5511PHP_ROUND_HALF_DOWN); //1.6

?>
2014-07-02 01:49:37
http://php5.kiev.ua/manual/ru/function.round.html
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)
2014-09-02 06:34:49
http://php5.kiev.ua/manual/ru/function.round.html
/**
 * Round to first significant digit
 * +N to +infinity
 * -N to -infinity
 *
 */
function round1stSignificant ( $N ) {
  if ( $N === 0 ) {
    return 0;
  }

  $x = floor ( log10 ( abs( $N ) ) );

  return ( $N > 0 )
    ? ceil( $N * pow ( 10, $x * -1 ) ) * pow( 10, $x )
    : floor( $N * pow ( 10, $x * -1 ) ) * pow( 10, $x );
}

echo round1stSignificant( 39144818 ) . PHP_EOL;
echo round1stSignificant( 124818 ) . PHP_EOL;
echo round1stSignificant( 0.07468 ) . PHP_EOL;
echo round1stSignificant( 0 ) . PHP_EOL;
echo round1stSignificant( -0.07468 ) . PHP_EOL;

/**
 * Output
 * 
 * 40000000
 * 200000
 * 0.08
 * 0
 * -0.08
 * 
 */
2016-11-28 23:25:25
http://php5.kiev.ua/manual/ru/function.round.html
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.

<?php
/**
 * Truncate a float number, example: <code>truncate(-1.49999, 2); // returns -1.49
 * truncate(.49999, 3); // returns 0.499
 * </code>
 * @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($val0$p $f));
    }
    return 
$val;
}
?>

Originally posted in http://stackoverflow.com/a/12710283/1596489
2017-01-13 19:51:17
http://php5.kiev.ua/manual/ru/function.round.html

    Поддержать сайт на родительском проекте КГБ