Модуль математических операций с числами произвольной точности BCMath

Введение

Для математических операций с числами произвольной точности PHP предлагает модуль BCMath. Модуль поддерживает числа произвольного размера с точностью до 2 147 483 647, или 0x7FFFFFFF, десятичных знаков, если хватит памяти. Модуль представляет числа в виде строк.

Допустимые, или правильно сформированные, числа модуля BCMath — строки, которые соответствуют регулярному выражению: /^[+-]?[0-9]*(\.[0-9]*)?$/.

Предостережение

Передача float-значений в функции модуля BCMath, которые ожидают строковый операнд, иногда даёт неожиданные результаты. Причина состоит в способе, которым PHP преобразовывает значения с плавающей точкой (float) в строки (string). В ряде преобразований возвращается числовая строка в экспоненциальной нотации или числовая строка с десятичным разделителем в виде запятой; до PHP 8.0.0 разделитель дробной части зависел от региональных настроек. Модуль BCMath не поддерживает экспоненциальную нотацию и работает только с десятичной точкой.

<?php

$num1
= 0; // (string) 0 => '0'
$num2 = -0.000005; // (string) -0.000005 => '-5.05E-6'
echo bcadd($num1, $num2, 6); // => '0.000000'

setlocale(LC_NUMERIC, 'de_DE'); // Десятичная запятая вместо точки
$num2 = 1.2; // (string) 1.2 => '1,2'
echo bcsub($num1, $num2, 1); // => '0.0'

?>
  • Установка и настройка
  • Функции модуля BC Math
    • bcadd — Складывает два числа произвольной точности
    • bcceil — Округляет число произвольной точности в большую сторону
    • bccomp — Сравнивает два числа произвольной точности
    • bcdiv — Делит два числа произвольной точности
    • bcdivmod — Получает неполное частное и остаток от деления числа произвольной точности
    • bcfloor — Округляет число произвольной точности в меньшую сторону
    • bcmod — Получает остаток от деления чисел произвольной точности
    • bcmul — Умножает два числа произвольной точности
    • bcpow — Возводит в степень число произвольной точности
    • bcpowmod — Возводит число произвольной точности в степень и делит результат возведения в степень на модуль числа
    • bcround — Округляет число произвольной точности
    • bcscale — Устанавливает или получает количество цифр после десятичной точки по умолчанию для функций модуля BCMath
    • bcsqrt — Извлекает квадратный корень из числа произвольной точности
    • bcsub — Вычитает одно число произвольной точности из другого
  • BcMath\Number — Класс BcMath\Number
    • 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