◐ Shell
clean mode source ↗

PHP: bccomp - Manual

(PHP 4, PHP 5, PHP 7, PHP 8)

bccompCompare two arbitrary precision numbers

Description

Parameters

num1

The left operand, as a string.

num2

The right operand, as a string.

scale
This parameter is used to set the number of digits after the decimal place in the result. If null, it will default to the default scale set with bcscale(), or fallback to the value of the bcmath.scale INI directive.

Return Values

Returns 0 if both operands are equal, 1 if num1 is greater than num2, -1 otherwise.

Errors/Exceptions

This function throws a ValueError in the following cases:

  • num1 or num2 is not a well-formed BCMath numeric string.
  • scale is outside the valid range.

Changelog

Version Description
8.0.0 scale is now nullable.

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

?>

Found A Problem?

Robert Lozyniak

16 years ago

Beware that negative zero does not compare equal to positive zero.

aaugrin at gmail dot com

8 years ago

BEWARE! left and right operand is string!! so number in E-notation like 9.012E-6  need to be converted with sprintf('%F') to string

m dot kaczanowski at alianet dot pl

17 years ago

Improvement of functions bcmax() and bcmin() originaly written by frank at booksku dot com

<?php

function bcmax() {
  $args = func_get_args();
  if (count($args)==0) return false;
  $max = $args[0];
  foreach($args as $value) {
    if (bccomp($value, $max)==1) {
      $max = $value;
    }
  }
  return $max;
}

function bcmin() {
  $args = func_get_args();
  if (count($args)==0) return false;
  $min = $args[0];
  foreach($args as $value) {
    if (bccomp($min, $value)==1) {
      $min = $value;
    }
  }
  return $min;
}
?>

mm at mobelt dot com

1 year ago

If you want to compare 2 decimals for equality, bccomp does not works as expected:

bccomp("1.000000000000000","0.999999999999999",2)

returns 1

Instead, use

bcsub("1.000000000000000","0.999999999999999",2) == 0