Numerical Functions in PHP
Function Name | Function Description |
---|---|
abs() | Absolute value |
ceil() | Round fractions up |
floor() | Round fractions down |
fmod() | Returns the floating point remainder (modulo) of the division of the arguments |
is_finite() | Finds whether a value is a legal finite number |
is_infinite() | Finds whether a value is infinite |
is_nan() | Finds whether a value is not a number |
max() | Find highest value |
min() | Find lowest value |
round() | Rounds a float |
PHP abs()
Function
PHP abs()
Usage
The PHP
function will give you the absolute value of abs()
number
.
PHP abs()
Syntax
abs ( mixed $number ) : number
PHP abs()
Parameters
number
— The numeric value to process
PHP abs()
Return Value
The PHP abs()
function returns type is also float, otherwise it is integer (as float usually has a bigger value range than integer).
PHP abs()
Working Examples
1. abs() example
<?php
echo abs(-4.2); // 4.2 (double/float)
echo abs(5); // 5 (integer)
echo abs(-5); // 5 (integer)
?>
PHP ceil()
Function
PHP ceil()
Usage
The PHP
function will give you the next highest integer value by rounding up ceil()
value
if necessary.
PHP ceil()
Syntax
ceil ( float $value ) : float
PHP ceil()
Parameters
value
— The value to round
PHP ceil()
Return Value
The PHP ceil()
function returns value of ceil()
is still of type float as the value range of float is usually bigger than that of integer.
PHP ceil()
Working Examples
1. ceil() example
<?php
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3
?>
Additional Tips from Fellow Developers
Contributed By: Scott Weaver / scottmweaver * gmail
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(0, 1000); // 0
echo ceiling(1, 1); // 1000
echo ceiling(1001, 1000); // 2000
echo ceiling(1.27, 0.05); // 1.30
?>
Contributed By: eep2004
Caution!
<?php
$value = 77.4;
echo ceil($value * 100) / 100; // 77.41 - WRONG!
echo ceil(round($value * 100)) / 100; // 77.4 - OK!
Contributed By: 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
?>
PHP floor()
Function
PHP floor()
Usage
The PHP
function will give you the next lowest integer value (as float) by rounding down floor()
value
if necessary.
PHP floor()
Syntax
floor ( float $value ) : float
PHP floor()
Parameters
value
— The numeric value to round
PHP floor()
Return Value
The PHP floor()
function returns value of floor()
is still of type float because the value range of float is usually bigger than that of integer. This function return FALSE
in case of an error (e.g. passing an array).
PHP floor()
Working Examples
1. floor() example
<?php
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
?>
Additional Tips from Fellow Developers
Contributed By: greene dot mc
I believe this behavior of the floor function was intended. Note that it says "the next lowest integer". -1 is "higher" than -1.6. As in, -1 is logically greater than -1.6. To go lower the floor function would go to -2 which is logically less than -1.6.
Floor isn't trying to give you the number closest to zero, it's giving you the lowest bounding integer of a float.
In reply to Glen who commented:
Glen
01-Dec-2007 04:22
<?php
echo floor(1.6); // will output "1"
echo floor(-1.6); // will output "-2"
?>
instead use intval (seems to work v5.1.6):
<?php
echo intval(1.6); // will output "1"
echo intval(-1.6); // will output "-1"
?>
Contributed By: seppili_
I use this function to floor with decimals:
<?php
function floordec($zahl,$decimals=2){
return floor($zahl*pow(10,$decimals))/pow(10,$decimals);
}
?>
Contributed By: maikl
A correction to the funcion floor_dec from the user "php is the best".
If the number is 0.05999 it returns 0.59 because the zero at left position is deleted.
I just added a '1' and after the floor or ceil call remove with a substr.
Hope it helps.
function floor_dec($number,$precision = 2,$separator = '.') {
$numberpart=explode($separator,$number);
$numberpart[1]=substr_replace($numberpart[1],$separator,$precision,0);
if($numberpart[0]>=0) {
$numberpart[1]=substr(floor('1'.$numberpart[1]),1);
} else {
$numberpart[1]=substr(ceil('1'.$numberpart[1]),1);
}
$ceil_number= array($numberpart[0],$numberpart[1]);
return implode($separator,$ceil_number);
}
Contributed By: benrr101
But, if you want the number closest to zero, you could use this:
<?php
if($foo > 0) {
floor($foo);
} else {
ceil($foo);
}
?>
-benrr101
Contributed By: fragov
Have solved a "price problem":
<?php
$peny = floor($row->price*1000) - floor($row->price)*1000)/10;
?>
PHP fmod()
Function
PHP fmod()
Usage
The PHP
function will give you the floating point remainder (modulo) of the division of the arguments.fmod()
PHP fmod()
Syntax
fmod ( float $x , float $y ) : float
PHP fmod()
Parameters
x
— The dividendy
— The divisor
PHP fmod()
Return Value
The PHP fmod()
function returns the floating point remainder of x
/y
PHP fmod()
Working Examples
1. Using fmod()
<?php
$x = 5.7;
$y = 1.3;
$r = fmod($x, $y);
// $r equals 0.5, because 4 * 1.3 + 0.5 = 5.7
?>
PHP is_finite()
Function
PHP is_finite()
Usage
The PHP
function will finds whether a value is a legal finite number.is_finite()
PHP is_finite()
Syntax
is_finite ( float $val ) : bool
PHP is_finite()
Parameters
val
— The value to check
PHP is_finite()
Return Value
The PHP is_finite()
function returns TRUE
if val
is a legal finite number within the allowed range for a PHP float on this platform, else FALSE
.
PHP is_infinite()
Function
PHP is_infinite()
Usage
The PHP
function will give you is_infinite()
TRUE
if val
is infinite (positive or negative), like the result of log(0) or any value too big to fit into a float on this platform.
PHP is_infinite()
Syntax
is_infinite ( float $val ) : bool
PHP is_infinite()
Parameters
val
— The value to check
PHP is_infinite()
Return Value
The PHP is_infinite()
function returns TRUE
if val
is infinite, else FALSE
.
PHP is_nan()
Function
PHP is_nan()
Usage
The PHP
function will checks whether is_nan()
val
is 'not a number', like the result of acos(1.01).
PHP is_nan()
Syntax
is_nan ( float $val ) : bool
PHP is_nan()
Parameters
val
— The value to check
PHP is_nan()
Return Value
The PHP is_nan()
function returns TRUE
if val
is 'not a number', else FALSE
.
PHP is_nan()
Working Examples
1. is_nan() example
<?php
// Invalid calculation, will return a
// NaN value
$nan = acos(8);
var_dump($nan, is_nan($nan));
?>
Output of the above code:
float(NAN)
bool(true)
Additional Tips from Fellow Developers
Contributed By: darkangel
nan/"not a number" is not meant to see if the data type is numeric/textual/etc..
NaN is actually a set of values which can be stored in floating-point variables, but dont actually evaluate to a proper floating point number.
The floating point system has three sections: 1 bit for the sign (+/-), an 8 bit exponent, and a 23 bit fractional part.
There are rules governing which combinations of values can be placed into each section, and some values are reserved for numbers such as infinity. This leads to certain combinations being invalid, or in other words, not a number.
PHP max()
Function
PHP max()
Usage
The PHP
function will give you the highest value in that array. If at least two parameters are provided, max()
max()
return the biggest of these values.
PHP max()
Syntax
max ( array $values ) : mixed
max ( mixed $value1 [, mixed $... ] ) : mixed
PHP max()
Parameters
values
— An array containing the values.value1
— Any comparable value....
— Any comparable value.
PHP max()
Return Value
The PHP max()
function returns the parameter value considered "highest" according to standard comparisons. If multiple values of different types evaluate as equal (e.g. 0 and 'abc') the first provided to the function will be returned.
PHP max()
Working Examples
1. Example uses of max()
<?php
echo max(2, 3, 1, 6, 7); // 7
echo max(array(2, 4, 5)); // 5
// The string 'hello' when compared to an int is treated as 0
// Since the two values are equal, the order they are provided determines the result
echo max(0, 'hello'); // 0
echo max('hello', 0); // hello
// Here we are comparing -1 < 0, so 'hello' is the highest value
echo max('hello', -1); // hello
// With multiple arrays of different lengths, max returns the longest
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)
// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 5 > 4
$val = max(array(2, 4, 8), array(2, 5, 1)); // array(2, 5, 1)
// If both an array and non-array are given, the array will be returned
// as comparisons treat arrays as greater than any other value
$val = max('string', array(2, 5, 7), 42); // array(2, 5, 7)
// If one argument is NULL or a boolean, it will be compared against
// other values using the rule FALSE < TRUE regardless of the other types involved
// In the below example, -10 is treated as TRUE in the comparison
$val = max(-10, FALSE); // -10
// 0, on the other hand, is treated as FALSE, so is "lower than" TRUE
$val = max(0, TRUE); // TRUE
?>
Important Points about PHP max()
Function
Values of different types will be compared using the standard comparison rules. For instance, a non-numeric string will be compared to an integer as though it were 0, but multiple non-numeric string values will be compared alphanumerically. The actual value returned will be of the original type with no conversion applied.
Additional Tips from Fellow Developers
Contributed By: keith
The simplest way to get around the fact that max() won't give the key is array_search:
<?php
$student_grades = array ("john" => 100, "sarah" => 90, "anne" => 100);
$top_student = array_search(max($student_grades),$student_grades); // john
?>
This could also be done with array_flip, though overwriting will mean that it gets the last max value rather than the first:
<?php
$grades_index = array_flip($student_grades);
$top_student = $grades_index[max($student_grades)]; // anne
?>
To get all the max value keys:
<?php
$top_students = array_keys($student_grades,max($student_grades)); // john, anne
?>
Contributed By: costinu
max(null, 0) = null
max(0, null) = 0
Contributed By: volch5
max() (and min()) on DateTime objects compares them like dates (with timezone info) and returns DateTime object.
<?php
$dt1 = new DateTime('2014-05-07 18:53', new DateTimeZone('Europe/Kiev'));
$dt2 = new DateTime('2014-05-07 16:53', new DateTimeZone('UTC'));
echo max($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T16:53:00+00:00
echo min($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T18:53:00+03:00
?>
It works at least 5.3.3-7+squeeze17
Contributed By:
Notice that whenever there is a Number in front of the String, it will be used for Comparison.
<?php
max('7iuwmssuxue', 1); //returns 7iuwmssuxu
max('-7suidha', -4); //returns -4
?>
But just if it is in front of the String
<?php
max('sdihatewin7wduiw', 3); //returns 3
?>
PHP min()
Function
PHP min()
Usage
The PHP
function will give you the lowest value in that array. If at least two parameters are provided, min()
min()
return the smallest of these values.
PHP min()
Syntax
min ( array $values ) : mixed
min ( mixed $value1 [, mixed $... ] ) : mixed
PHP min()
Parameters
values
— An array containing the values.value1
— Any comparable value....
— Any comparable value.
PHP min()
Return Value
The PHP min()
function returns the parameter value considered "lowest" according to standard comparisons. If multiple values of different types evaluate as equal (e.g. 0 and 'abc') the first provided to the function will be returned.
PHP min()
Working Examples
1. Example uses of min()
<?php
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2
// The string 'hello' when compared to an int is treated as 0
// Since the two values are equal, the order they are provided determines the result
echo min(0, 'hello'); // 0
echo min('hello', 0); // hello
// Here we are comparing -1 < 0, so -1 is the lowest value
echo min('hello', -1); // -1
// With multiple arrays of different lengths, min returns the shortest
$val = min(array(2, 2, 2), array(1, 1, 1, 1)); // array(2, 2, 2)
// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
// If both an array and non-array are given, the array is never returned
// as comparisons treat arrays as greater than any other value
$val = min('string', array(2, 5, 7), 42); // string
// If one argument is NULL or a boolean, it will be compared against
// other values using the rules FALSE < TRUE and NULL == FALSE regardless of the
// other types involved
// In the below examples, both -10 and 10 are treated as TRUE in the comparison
$val = min(-10, FALSE, 10); // FALSE
$val = min(-10, NULL, 10); // NULL
// 0, on the other hand, is treated as FALSE, so is "lower than" TRUE
$val = min(0, TRUE); // 0
?>
Important Points about PHP min()
Function
Values of different types will be compared using the standard comparison rules. For instance, a non-numeric string will be compared to an integer as though it were 0, but multiple non-numeric string values will be compared alphanumerically. The actual value returned will be of the original type with no conversion applied.
PHP round()
Function
PHP round()
Usage
The PHP
function will give you the rounded value of round()
val
to specified precision
(number of digits after the decimal point). precision
can also be negative or zero (default).
PHP round()
Syntax
round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] ) : float
PHP round()
Parameters
val
— The value to round.precision
— The optional number of decimal digits to round to.mode
— Use one of the following constants to specify the mode in which rounding occurs.
PHP round()
Return Value
The PHP round()
function returns the value rounded to the given precision
as a float.
PHP round()
Working Examples
1. round() examples
<?php
var_dump(round(3.4));
var_dump(round(3.5));
var_dump(round(3.6));
var_dump(round(3.6, 0));
var_dump(round(1.95583, 2));
var_dump(round(1241757, -3));
var_dump(round(5.045, 2));
var_dump(round(5.055, 2));
?>
Output of the above code:
float(3)
float(4)
float(4)
float(4)
float(1.96)
float(1242000)
float(5.05)
float(5.06)
2. How precision affects a float
<?php
$number = 1346.21;
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));
?>
Output of the above code:
float(1346.21)
float(1346.2)
float(1346)
float(1350)
float(1300)
float(1000)
float(0)
3. mode examples
<?php
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));
?>
Output of the above code:
Rounding modes with 9.5
float(10)
float(9)
float(10)
float(9)
Rounding modes with 8.5
float(9)
float(8)
float(8)
float(9)
4. mode with precision examples
<?php
echo 'Using PHP_ROUND_HALF_UP with 1 decimal digit precision' . 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 'Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision' . 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 'Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision' . 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 'Using PHP_ROUND_HALF_ODD with 1 decimal digit precision' . 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));
?>
Output of the above code:
Using PHP_ROUND_HALF_UP with 1 decimal digit precision
float(1.6)
float(1.5)
float(-1.6)
float(-1.5)
Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision
float(1.5)
float(1.5)
float(-1.5)
float(-1.5)
Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision
float(1.6)
float(1.5)
float(-1.6)
float(-1.5)
Using PHP_ROUND_HALF_ODD with 1 decimal digit precision
float(1.5)
float(1.5)
float(-1.5)
float(-1.5)
Changelog for PHP round() Function
5.3.0 — The mode
parameter was introduced.
5.2.7 — The inner workings of round()
was changed to conform to the C99 standard.
Additional Tips from Fellow Developers
Contributed By: takingsides
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);
}
?>
Contributed By: depaula
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($val, 0, $p + 1 + $f));
}
return $val;
}
?>
Originally posted in http://stackoverflow.com/a/12710283/1596489
Contributed By: slimusgm
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)
Contributed By: djcox99
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.
Contributed By: twan
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 .
Contributed By: Anonymous
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 = 1 / $increments;
return (ceil($number * $increments) / $increments);
}
?>
Rate this post —