La clase BcMath\Number

(PHP 8 >= 8.4.0)

Introducción

Una clase para un número de precisión arbitraria. Estos objetos soportan los operadores aritméticos y de comparación.

Nota: Esta clase no se ve afectada por la directiva INI bcmath.scale definida en el php.ini.

Nota: El comportamiento de un operador sobrecargado es el mismo que especificar null para el argumento scale en el método correspondiente.

Sinopsis de la Clase

namespace BcMath;
final readonly class Number implements Stringable {
/* Propiedades */
public string $value;
public int $scale;
/* Métodos */
public __construct(string|int $num)
public compare(BcMath\Number|string|int $num, ?int $scale = null): int
public divmod(BcMath\Number|string|int $num, ?int $scale = null): array
public pow(BcMath\Number|string|int $exponent, ?int $scale = null): BcMath\Number
public powmod(BcMath\Number|string|int $exponent, BcMath\Number|string|int $modulus, ?int $scale = null): BcMath\Number
public round(int $precision = 0, RoundingMode $mode = RoundingMode::HalfAwayFromZero): BcMath\Number
public __serialize(): array
public sqrt(?int $scale = null): BcMath\Number
public __toString(): string
public __unserialize(array $data): void
}

Propiedades

value
Una representación en string de un número de precisión arbitraria.
scale
El valor de la escala actualmente definida en el objeto. Para los objetos resultantes de cálculos, este valor se calcula y define automáticamente, a menos que el argumento scale haya sido definido en el método de cálculo.

Tabla de contenidos

add a note

User Contributed Notes 2 notes

up
5
harl at gmail dot com
1 year ago
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.
up
0
miken32 at gmail dot com
19 days ago
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
}
?>
To Top