Класс BcMath\Number

(PHP 8 >= 8.4.0)

Введение

Класс выполняет математические операции с числами произвольной точности. Объекты класса поддерживают перегруженные арифметические операторы и операторы сравнения.

Замечание: На класс не влияет INI-директива bcmath.scale, которую устанавливают в файле php.ini.

Замечание: Перегруженные операторы ведут себя так же, как параметр scale со значением null в методах с поддержкой такого параметра.

Обзор класса

namespace BcMath;
final readonly class Number implements Stringable {
/* Свойства */
public string $value;
public int $scale;
/* Методы */
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
}

Свойства

value
Строковое представление числа произвольной точности.
scale
Текущее значение масштаба, которое устанавливается для объекта. Класс автоматически вычисляет и устанавливает это значение для объектов, которые получились в результате расчётов, если параметр scale не установили в методе расчёта.

Содержание

  • BcMath\Number::add — Складывает числа произвольной точности
  • BcMath\Number::ceil — Округляет число произвольной точности в бо́льшую сторону
  • BcMath\Number::compare — Сравнивает два числа произвольной точности
  • BcMath\Number::__construct — Создаёт новый объект BcMath\Number
  • BcMath\Number::div — Делит числа произвольной точности
  • BcMath\Number::divmod — Получает неполное частное и остаток от деления числа произвольной точности
  • BcMath\Number::floor — Округляет число произвольной точности в меньшую сторону
  • BcMath\Number::mod — Получает остаток от деления числа произвольной точности
  • BcMath\Number::mul — Умножает число произвольной точности
  • BcMath\Number::pow — Возводит число произвольной точности в степень
  • BcMath\Number::powmod — Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
  • BcMath\Number::round — Округляет число произвольной точности
  • BcMath\Number::__serialize — Сериализует объект BcMath\Number
  • BcMath\Number::sqrt — Извлекает квадратный корень из числа произвольной точности
  • BcMath\Number::sub — Вычитает из числа произвольной точности
  • BcMath\Number::__toString — Преобразовывет объект BcMath\Number в строку
  • BcMath\Number::__unserialize — Десериализует данные в объект BcMath\Number
Добавить

Примечания пользователей 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