BcMath\Number is one of those classes that overloads boolean casting.
If $z = new BcMath\Number(0) then $z is considered falsy (and hence, for example, empty($z)==true) even though it is a genuine Number object.(PHP 8 >= 8.4.0)
A class for an arbitrary precision number. These objects support overloaded arithmetic and comparison operators.
Note: This class is not affected by the bcmath.scale INI directive set in php.ini.
Note: The behavior of an overloaded operator is the same as specifying
nullfor thescaleparameter on the corresponding method.
$exponent, BcMath\Number|string|int $modulus, ?int $scale = null): BcMath\Number$precision = 0, RoundingMode $mode = RoundingMode::HalfAwayFromZero): BcMath\Numberscale parameter was set in the calculation method.
BcMath\Number is one of those classes that overloads boolean casting.
If $z = new BcMath\Number(0) then $z is considered falsy (and hence, for example, empty($z)==true) even though it is a genuine Number object.This class overloads many operators so you can do operations more naturally. But a big caveat is that the strict equality operator *does not work* as demonstrated with this code:
<?php
$sum = new BcMath\Number('23.93') + new BcMath\Number(17) - 6;
echo $sum; // outputs 34.93
if ($sum < 99 && $sum > 34) {
echo "foo"; // outputs foo
}
$comp = new BcMath\Number('34.93');
if ($sum === $comp) {
echo "bar"; // outputs nothing!
}
if ($sum == $comp) {
// yuck, don't do this
}
if ($sum->compare($comp) === 0) {
echo "baz"; // outputs baz
}
?>