ceil

(PHP 4, PHP 5)

ceilОкругляет дробь в большую сторону

Описание

float ceil ( float $value )

Возвращает ближайшее большее целое от value.

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

value

Значение, которое требуется округлить в большую сторону

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

Возвращает ближайшее большее целое от value. Тип возвращаемого значения остаётся float т.к. диапазон float больше integer.

Примеры

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

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>

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

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

Коментарии

Here is a navbar using the ceil function.

<?php
 
function navbar($num_rows,$page,$link) {
   
$nbrlink 10/* Number of link to display per page */
   
$page = (int) $page/* Page now displayed */
   
$num_rows = (int) $num_rows;

   if( 
$num_rows ) {
     
$total_page ceil$num_rows $nbrlink );

     for( 
$i=1;$i<$total_page+1;$i++ ) {
       if( 
$i == $page ) {
         
$ret .= " <b>$i</b> ";
       } else {
         if( 
strstr$link,"?" ) ) {
           
$ret .= " <a href=\"$link&page=$i\">$i</a> ";
         } else {
           
$ret .= " <a href=\"$link?page=$i\">$i</a> ";
         }
       }
     }

     return 
$ret;
   }
 }
 
/* Let say that $num_rows content the numbre of rows of your sql query */
 
$navbar navbar$num_rows$page"listmovie.php?id=$id);

  if( 
$navbar != null || $navbar != "" ) {
    print( 
"<p><div align=\"center\">$navbar</div></p>" );
  }
?>
2003-11-10 04:02:55
http://php5.kiev.ua/manual/ru/function.ceil.html
IceKarma said: "If you want, say, 2.6 to round to 3, and -2.6 to round to -3, you want round(), which rounds away from zero."

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.

<?php

function roundaway($num) {
    if (
$num 0)
      return 
ceil($num);
    elseif (
$num 0)
      return 
floor($num);
    elseif (
$num == 0)
      return 
0;
}

?>
2004-04-22 08:51:20
http://php5.kiev.ua/manual/ru/function.ceil.html
Or for the terniary fans:

<?php

function roundaway($num) {
   return((
$num 0) ? ceil($num) : floor($num));
}

?>

Slightly pointless, but there you have it, in one line only..
2004-07-21 16:10:15
http://php5.kiev.ua/manual/ru/function.ceil.html
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.

<?php
 
// round_up:
 // rounds up a float to a specified number of decimal places
 // (basically acts like ceil() but allows for decimal places)
 
function round_up ($value$places=0) {
  if (
$places 0) { $places 0; }
 
$mult pow(10$places);
  return 
ceil($value $mult) / $mult;
 }

 
// round_out:
 // rounds a float away from zero to a specified number of decimal places
 
function round_out ($value$places=0) {
  if (
$places 0) { $places 0; }
 
$mult pow(10$places);
  return (
$value >= ceil($value $mult):floor($value $mult)) / $mult;
 }

 echo 
round_up (56.770012); // displays 56.78
 
echo round_up (-0.4530014); // displays -0.453
 
echo round_out (56.770012); // displays 56.78
 
echo round_out (-0.4530014); // displays -0.4531
?>
2005-02-28 14:40:48
http://php5.kiev.ua/manual/ru/function.ceil.html
float ceil

function fCeil($val,$pressision=2){
     $p = pow(10,$pressision);
    $val = $val*$p;
    $val = ceil($val);
  return $val /$p;
}
2007-03-20 13:35:13
http://php5.kiev.ua/manual/ru/function.ceil.html
I needed this and couldn't find it so I thought someone else wouldn't have to look through a bunch of Google results-

<?php

// duplicates m$ excel's ceiling function
if( !function_exists('ceiling') )
{
    function 
ceiling($number$significance 1)
    {
        return ( 
is_numeric($number) && is_numeric($significance) ) ? (ceil($number/$significance)*$significance) : false;
    }
}

echo 
ceiling(01000);     // 0
echo ceiling(11);        // 1000
echo ceiling(10011000);  // 2000
echo ceiling(1.270.05);  // 1.30

?>
2008-08-29 13:46:51
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
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.

<?php
// $x is the variable
// $c is the base multiple to round to, away from zero
$result =  ( ($y $x/$c) == ($y = (int)$y) ) ? $x : ( $x>=?++$y:--$y)*$c ;
?>

I originally developed this as an example of write-only code: to make the point that being cleverly terse might save clock ticks but wastes more in programmer time generating un-maintainable code.

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:

<?php
function myCeilingLong($x,$c)
{
   
// $x is variable
    // $c is ceiling multiple
   
$a $x/$c ;
   
$b = (int)$a ;
    if (
$a == $b)
        return 
$x // x is already a multiple of c;
   
else
    {
        if (
$x>=0)
            return (
$b+1)*$c // return ((int)(x/c)+1 ) * c
       
else
            return (
$b-1)*$c // return ((int)(x/c)-1 ) * c
   
}
}
?>

<?php
function myCeilingShort($x,$c)
{
    return ( (
$y $x/$c) == ($y = (int)$y) ) ? $x : ( $x>=?++$y:--$y)*$c ;
}
?>

Comparing the versions for speed: the in-line version is about three times faster than myCeilingLong() - but this is almost entirely down to function call overhead. 

Putting the in-line code inside the function: the difference in execution speed between myCeilingLong() and myCeilingShort() is around 1.5%.

ceil() is still around 25% faster than the in-line statement so if you are a speed hound your efforts might be better devoted to compiling your own library ...
2011-03-07 06:55:11
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
Actual behaviour:
echo ceil(-0.1); //result "-0" but i expect "0"

Workaround:
echo ceil(-0.1)+0; //result "0"
2011-05-10 06:12:44
http://php5.kiev.ua/manual/ru/function.ceil.html
Please see language.types.float for information regarding floating point precision issues.
2012-02-06 04:38:10
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
$k = 0.14 * 100;
echo ceil($k); // results 15

solution is in converting float number to string

Example 1.
echo ceil ("{$k}"); // results 14

Example 2.
$totalSum1 = 102.1568;
$k = $totalSum1 / 100;
echo ceil ("{$k}"); // results 102.16

Example 3.
$totalSum2 = 102.15;
$k = $totalSum1 / 100;
echo ceil ("{$k}"); // results 102.15

useful for 'ceil' with precision capability
2012-03-30 15:15:12
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
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
    {$numberpart[1]=floor($numberpart[1]);}

    $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
2012-04-20 09:29:54
http://php5.kiev.ua/manual/ru/function.ceil.html
Here is another way to use ceil for decimal numbers with precision:

<?php
   
function ceil_dec($number$precision)
    {
       
$coefficient pow(10,$precision);
        return 
ceil($number*$coefficient)/$coefficient;
    }
?>
2012-07-30 21:20:51
http://php5.kiev.ua/manual/ru/function.ceil.html
Some people asking on rounding -1.5 to -2 and 1.5 to 2, the way is this:

<?=round($var0PHP_ROUND_HALF_UP)?>

See round() doc for more information on this.
2013-06-16 22:00:37
http://php5.kiev.ua/manual/ru/function.ceil.html
Remember that floating point precision means behavior can be "correct" - though not what you expect:

php > echo 100 * 1 * 0.07;
7
php > echo ceil(100 * 1 * 0.07);
8
2013-07-29 14:57:38
http://php5.kiev.ua/manual/ru/function.ceil.html
You can simply make a ceil with decimals function by using the round() function and add 0.05 to the value if the value must have 1 decimal accuracy, or 0.005 for 2 decimals accuracy, or 0.0005 for 3 decimals etc.

Example :

function ceilDec($input, $decimals)
{
    $subtract = 5 / pow(10, $decimals + 1);
    $output = round($input + $subtract, $decimals);
    return $output;
}
2014-05-12 10:14:54
http://php5.kiev.ua/manual/ru/function.ceil.html
$test = (1 - 0.7) * 10;

$test_1 = ceil($test);
$test_2 = ceil($test * 10);

var_dump($test_1);    // float 4
var_dump($test_2);    // float 31
2014-12-05 14:16:33
http://php5.kiev.ua/manual/ru/function.ceil.html
Here is a more accurate way to round on superior decimal.

function round_sup($nb, $precision) {
        $p = pow(10, $precision);
        return ceil(round($nb * $p, 1)) / $p;
}

$k = 10 * 4.98;                   // k = 49.8
echo ceil($k * 10) / 10;    // 49.9   !!
echo round_sup($k, 1);   // 49.8
2015-04-14 18:14:48
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
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.

<?PHP
echo('Displaying 13915.0000000000018190 : '13915.0000000000018190);
echo(
'<br>');
echo(
'Result ceil(13915.0000000000018190) :'.ceil(13915.0000000000018190));
echo(
'<br>');
?>
For example 13915 cannot be represented as exactly 13915 but becomes 
13916.0000000000018190 and 'ceil' will therefore round it up to 13916.

<?PHP
$value 
12650 1.1;
echo(
'Expected behaviour : ceil(12650 * 1.1) = ceil(13915) = 13915');
echo(
'<br>');
echo(
'Using only ceil :'.ceil($value));
echo(
'<br>');
echo(
'Showing decimals : '.number_format($value floor($value), 16));
echo(
'<br>');
echo(
'Using ceil + round : '.ceil(round($value,4)));
?>

So if 'ceil' looks like it is not working correctly and rounding up figures that end in 0 (zero) then this might be the cause of this behaviour.
Adding a simple 'round' before the applying the 'ceil' solves this problem.
2015-05-25 06:38:20
http://php5.kiev.ua/manual/ru/function.ceil.html
Автор:
Just a quick note to be careful of, if you use the "round_up" code suggested by steve, i must warn you it isn't completely fool proof.

I have the following maths which is evaluated incorrectly

37.2000 - 6.2000 = 31.01

echo(round_up(37.2000 - 6.2000,2));

This returns the incorrect result, 31.01 which as any junior in mathematics knows...IS WRONG!

use with caution.
2015-11-03 11:22:03
http://php5.kiev.ua/manual/ru/function.ceil.html
Caution!
<?php
$value 
77.4;
echo 
ceil($value 100) / 100;            // 77.41 - WRONG!
echo ceil((string)($value 100)) / 100// 77.4 - OK!
2018-05-12 13:52:28
http://php5.kiev.ua/manual/ru/function.ceil.html
Caution!
<?php
$value 
77.4;
echo 
ceil($value 100) / 100;         // 77.41 - WRONG!
echo ceil(round($value 100)) / 100// 77.4 - OK!
2018-05-13 13:09:24
http://php5.kiev.ua/manual/ru/function.ceil.html
Casting to an int can fix the floating point issue when doing math and then calling ciel(...)

echo PHP_EOL;
$value = 77.4;
$value1 = (int) ($value * 100);
echo $value1;   // 7740
echo PHP_EOL;
$value2 = ((int) ($value * 100))/100;
echo $value2; // 77.4
echo PHP_EOL;
echo ceil($value1) . " ceil step"; // 7740
echo PHP_EOL;
echo ceil(7740.00000) . " ciel a float"; // 7740
echo PHP_EOL;
echo ceil($value * 100); // 7741
echo PHP_EOL;
echo ceil($value * 100) / 100;         // 77.41 - WRONG!
echo PHP_EOL;
echo ceil(round($value * 100)) / 100;  // 77.4 - OK!
2023-08-02 21:06:08
http://php5.kiev.ua/manual/ru/function.ceil.html

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