A classe BcMath\Number

(PHP 8 >= 8.4.0)

Introdução

Uma classe para número de precisão arbitrária. Estes objetos suportam sobrecarga de operadores aritméticos e comparativos.

Nota: Esta classe não é afetada pela diretiva INI bcmath.scale definida no php.ini.

Nota: O comportamento de um operador sobrecarregado é o mesmo que especificar null para o parâmetro scale no método correspondente.

Resumo da classe

namespace BcMath;
final readonly class Number implements Stringable {
/* Propriedades */
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
}

Propriedades

value
Uma representação string de um número de precisão arbitrária.
scale
O valor de escala atualmente definido no objeto. Para objetos resultantes de cálculos, este valore é computado e definido automaticamente, a menos que o parâmetro scale tenha sido definido no método de cálculo.

Índice

adicionar nota

Notas de Usuários 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