I slapped together min() and max() functions using bccomp(). While min() and max() only take an arbitrary number of args (i.e. max(1, 5, 1235, 12934, 66)) bccomp only takes 2.
Note that this doesn't take into account $scale.
<?php
function bcmax() {
$max = null;
foreach(func_get_args() as $value) {
if ($max == null) {
$max = $value;
} else if (bccomp($max, $value) < 0) {
$max = $value;
}
}
return $max;
}
function bcmin() {
$min = null;
foreach(func_get_args() as $value) {
if ($min == null) {
$min = $value;
} else if (bccomp($min, $value) > 0) {
$min = $value;
}
}
return $min;
}
?>
bccomp
(PHP 4, PHP 5)
bccomp — Compare two arbitrary precision numbers
Description
int bccomp
( string $left_operand
, string $right_operand
[, int $scale
] )
Compares the left_operand to the right_operand and returns the result as an integer.
Parameters
- left_operand
-
The left operand, as a string.
- right_operand
-
The right operand, as a string.
- scale
-
The optional scale parameter is used to set the number of digits after the decimal place which will be used in the comparison.
Return Values
Returns 0 if the two operands are equal, 1 if the left_operand is larger than the right_operand , -1 otherwise.
Examples
Example #1 bccomp() example
<?php
echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>
bccomp
frank at booksku dot com
04-Oct-2005 11:41
04-Oct-2005 11:41
11-Feb-2005 10:03
Note that the above function defeats the purpose of BCMath functions, for it uses the 'conventional' < operator.
Instead, it should be:
<?php
function my_bccomp_zero($amount, $scale)
{
if (@$amount{0}=="-")
{
return bccomp($amount, '-0.0', $scale);
}
else
{
return bccomp($amount, '0.0', $scale);
}
}
?>
