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)
Une classe pour un nombre de précision arbitraire. Ces objets supportent les opérateurs arithmétiques et de comparaison.
Note:
Cette classe n'est pas affectée par la directive INI bcmath.scale définie dans le php.ini.
Note:
Le comportement d'un opérateur surchargé est le même que de spécifier
nullpour le paramètrescalesur la méthode correspondante.
$exponent, BcMath\Number|string|int $modulus, ?int $scale = null): BcMath\Number$precision = 0, RoundingMode $mode = RoundingMode::HalfAwayFromZero): BcMath\NumberUne représentation en chaîne d'un nombre de précision arbitraire.
La valeur de l'échelle actuellement définie sur l'objet.
Pour les objets résultant de calculs, cette valeur est automatiquement calculée et définie,
sauf si le paramètre scale a été défini dans la méthode de calcul.
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
}
?>