BCMath Arbitrary Precision Mathematics
Introduction
For arbitrary precision mathematics PHP offers BCMath which supports numbers of any size and precision up to 2147483647 (or 0x7FFFFFFF) decimal digits, if there is sufficient memory, represented as strings.
Valid (aka. well-formed) BCMath numbers are strings which match the regular expression /^[+-]?[0-9]*(\.[0-9]*)?$/.
Caution
Passing values of type float to a BCMath function which expects a string as operand may not have the desired effect due to the way PHP converts float values to string, namely that the string may be in exponential notation (which is not supported by BCMath), and that, prior to PHP 8.0.0, the decimal separator is locale dependent (while BCMath always expects a decimal point).
<?php
$num1 = 0; // (string) 0 => '0'
$num2 = -0.000005; // (string) -0.000005 => '-5.05E-6'
echo bcadd($num1, $num2, 6); // => '0.000000'
setlocale(LC_NUMERIC, 'de_DE'); // uses a decimal comma
$num2 = 1.2; // (string) 1.2 => '1,2'
echo bcsub($num1, $num2, 1); // => '0.0'
?>- Installing/Configuring
- BC Math Functions
- bcadd — Add two arbitrary precision numbers
- bcceil — Round up arbitrary precision number
- bccomp — Compare two arbitrary precision numbers
- bcdiv — Divide two arbitrary precision numbers
- bcdivmod — Get the quotient and modulus of an arbitrary precision number
- bcfloor — Round down arbitrary precision number
- bcmod — Get modulus of an arbitrary precision number
- bcmul — Multiply two arbitrary precision numbers
- bcpow — Raise an arbitrary precision number to another
- bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
- bcround — Round arbitrary precision number
- bcscale — Set or get default scale parameter for all bc math functions
- bcsqrt — Get the square root of an arbitrary precision number
- bcsub — Subtract one arbitrary precision number from another
- BcMath\Number — The BcMath\Number class
- BcMath\Number::add — Adds an arbitrary precision number
- BcMath\Number::ceil — Rounds up an arbitrary precision number
- BcMath\Number::compare — Compares two arbitrary precision numbers
- BcMath\Number::__construct — Creates a BcMath\Number object
- BcMath\Number::div — Divides by an arbitrary precision number
- BcMath\Number::divmod — Gets the quotient and modulus of an arbitrary precision number
- BcMath\Number::floor — Rounds down an arbitrary precision number
- BcMath\Number::mod — Gets the modulus of an arbitrary precision number
- BcMath\Number::mul — Multiplies an arbitrary precision number
- BcMath\Number::pow — Raises an arbitrary precision number
- BcMath\Number::powmod — Raises an arbitrary precision number, reduced by a specified modulus
- BcMath\Number::round — Rounds an arbitrary precision number
- BcMath\Number::__serialize — Serializes a BcMath\Number object
- BcMath\Number::sqrt — Gets the square root of an arbitrary precision number
- BcMath\Number::sub — Subtracts an arbitrary precision number
- BcMath\Number::__toString — Converts BcMath\Number to string
- BcMath\Number::__unserialize — Deserializes a data parameter into a BcMath\Number object
↑ and ↓ to navigate • Enter to select • Esc to close • / to open