Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Mathematical Functions : ceil

ceil

Round fractions up (PHP 4, PHP 5)
float ceil ( float value )

Example 1140. ceil() example

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

Related Examples ( Source code ) » ceil



Code Examples / Notes » ceil

ermolaeva_elena

To round a number up to the nearest power of 10,
I've used
= ceil(intval($val)/10)*10;


schmad

To round a number up to the nearest power of 10 use this simple procedure:
$multiplier = .1;
while($number>1)
{
$number /= 10;
$multiplier *= 10;
}
$number = ceil($number) * $multiplier;


rjones

To eliftymes below:
To check if a numer is divisible by another number just check if the modulus is zero:
if ($bigger_number % $lower_number == 0)
{
   echo "Can be wholey divided<br />";
}
else
{
   echo "Not wholey divisible";
}


admin "at" dbss 'dot' dk

This note can be uset to eg. page shift.
$GbogRes = mysql_query("SELECT * FROM table WHERE felt = userid");
$CountRow = mysql_num_rows($GbogRes);

echo ceil($CountRow / 10);
so can you look X page you can shift.


zariok

the fCeil and round_up listed below are not reliable.  This could be due to a broken ceil function:
CODE:
function fCeil($val,$pressision=2){
 $p = pow(10,$pressision);
 $val = $val*$p;
 $val = ceil($val);
 return $val /$p;
}
print "fCeil: ".fCeil("0.5500",2)."\n";
print "ceil:  ".ceil("55.00")."\n";
print "ceil:  ".ceil(0.5500 * 100)."\n"; // should be interpreted as ceil(55);
OUTPUT:
fCeil: 0.56
ceil:  55
ceil:  56
Tested: PHP v5.2.2, v5.1.6, v5.0.4 CLI
Quick function I used as replacement:
CODE:
function round_up ($value, $precision=2) {
 $amt = explode(".", $value);
 if(strlen($amt[1]) > $precision) {
   $next = (int)substr($amt[1],$precision);
   $amt[1] = (float)(".".substr($amt[1],0,$precision));
   if($next != 0) {
     $rUp = "";
     for($x=1;$x<$precision;$x++) $rUp .= "0";
     $amt[1] = $amt[1] + (float)(".".$rUp."1");
   }
 }
 else {
   $amt[1] = (float)(".".$amt[1]);
 }
 return $amt[0]+$amt[1];
}
print round_up("0.5500",2)."\n";
print round_up("2.4320",2)."\n";
print "\nprecision: 2\n";
print round_up("0.5",2)."\n";
print round_up("0.05",2)."\n";
print round_up("0.050",2)."\n";
print round_up("0.0501", 2)."\n";
print round_up("0.0500000000001", 2)."\n";
print "\nprecision: 3\n";
print round_up("0.5",3)."\n";
print round_up("0.05",3)."\n";
print round_up("0.050",3)."\n";
print round_up("0.0501",3)."\n";
print round_up("0.0500000000001",3)."\n";
OUTPUT:
0.55
2.44
precision: 2
0.5
0.05
0.05
0.06
0.06
precision: 3
0.5
0.05
0.05
0.051
0.051


coxswain

steve_phpnet // nanovox \\ com wouldn't:
<?php
$ceil  = ceil(4.67 * 10) / 10;
?>
work just as well?


aaron

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..


insider ;

Just to comment on zariok's comment (which is right below mine), his problem is likely due to the fact that decimal numbers (such as 0.5500) cannot be exactly represented in binary (and hence computers can't precisely determine that 0.5500 * 100 = 55).
This feature is great when you know that your result is going to be nowhere near an integer (for example, finding ceil(1/3) will confidently give a 1).  However in situations like his, this is probably not the better function to use.


rainfalling

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;
}
?>


steve_phpnet // nanovox \\ com

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 >= 0 ? ceil($value * $mult):floor($value * $mult)) / $mult;
}
echo round_up (56.77001, 2); // displays 56.78
echo round_up (-0.453001, 4); // displays -0.453
echo round_out (56.77001, 2); // displays 56.78
echo round_out (-0.453001, 4); // displays -0.4531
?>


nobody

Here's a more simple one to do ceil to nearest 10:
function ceilpow10(val) {
  if (val % 10 == 0) return val;
  return val + (10 - (val % 10));
}


eliftymes

Here's a little function I wrote that checks if a number is divisible by another number.
function check_divisible($number, $divider) {
if(ceil($number/$divider) == $number/$divider) {
  return TRUE;
} else {
  return FALSE;
}
}
Useage would be as so.
$bigger_number=10;
$smaller_number=2;
if(check_divisible($bigger_number, $smaller_number)) {
echo "$bigger_number is divisible by $smaller_number!";
} else {
echo "$bigger_number is NOT divisible by $smaller_number!";
}
It's possible uses would be for:
Every 3rd, fourth, fifth, or whatever row in a table could be treated uniquely
Simple games...
Teaching your little kid math.


roger_dupere

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 > 0 ) {
    $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( "

<div align=\"center\">$navbar</div>" );
 }
?>


sven

function roundaway($num) {
switch($num) {
case ($num > 0):
$n = ceil($num);
break;
case ($num < 0):
$n = floor($num);
break;
case ($num == 0):
$n = 0;
break;
}
return $n;
}


themanwe

float ceil
function fCeil($val,$pressision=2){
    $p = pow(10,$pressision);
   $val = $val*$p;
   $val = ceil($val);
 return $val /$p;
}


icekarma

ceil() rounds towards positive infinity ("up"), floor() rounds towards negative infinity ("down").
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.


tom pittlik

ceil() is a useful way to quickly format bogus shopping cart quantities:
<?
ceil("str"); // 0
ceil("001"); // 1
ceil("0.1"); // 1
ceil("a34"); // 0
ceil("2fg"); // 2
ceil("$%%"); // 0
?>


clx

<?php
echo ceil(2.6); // will output "3"
echo ceil(-2.6); // will output "-2"
?>


zomis2k

>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.
round() does not always round away from zero
round(2.4) = 2
round(2.6) = 3
round(-2.4) = -2
round(-2.6) = -3
round() rounds number to nearest non-decimal number.


Change Language


Follow Navioo On Twitter
abs
acos
acosh
asin
asinh
atan2
atan
atanh
base_convert
bindec
ceil
cos
cosh
decbin
dechex
decoct
deg2rad
exp
expm1
floor
fmod
getrandmax
hexdec
hypot
is_finite
is_infinite
is_nan
lcg_value
log10
log1p
log
max
min
mt_getrandmax
mt_rand
mt_srand
octdec
pi
pow
rad2deg
rand
round
sin
sinh
sqrt
srand
tan
tanh
eXTReMe Tracker