Decimal
in package
Точная арифметика десятичных строк без ext-bcmath.
Используется реестром для построения точных множителей префиксных единиц: сдвиг десятичной точки (СИ-префиксы — степени 10) и умножение на целое (IEC-префиксы — степени 2 вплоть до 2⁸⁰, превышающие PHP_INT_MAX), а также калькулятором точности для разворота экспоненциальной записи.
Внутреннее представление — знак, цифры без точки и позиция точки от начала цифр. Канонизация (без незначащих нулей) выполняется на входе; сборка (Decimal::compose()) проверяет инвариант канонической формы, отклоняя любое нарушение.
Table of Contents
Constants
- CANONICAL : mixed = '/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?$/'
- Каноническая десятичная форма: без незначащих нулей и висячих точек.
Methods
- multiplyInteger() : string
- Точное умножение десятичной строки на неотрицательное целое (столбиком).
- normalize() : string
- Приводит десятичную строку к канонической форме («007.50» → «7.5»).
- shift() : string
- Умножает десятичную строку на 10^exponent сдвигом точки.
- canonical() : array{0: string, 1: int}
- Канонизация цифровой пары: срез ведущих нулей (позиция точки уменьшается, возможно до отрицательной: «0.005» → «5», −2) и хвостовых нулей дробной части; чистый ноль — («», 0).
- compose() : string
- Собирает каноническую строку из знака, цифр и позиции точки.
- multiplyDigits() : string
- Умножение последовательностей цифр столбиком (без точки и знака).
- parse() : array{0: string, 1: string, 2: int}
- Разбирает строку на знак и каноническую пару «цифры + позиция точки».
Constants
CANONICAL
Каноническая десятичная форма: без незначащих нулей и висячих точек.
private
mixed
CANONICAL
= '/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?$/'
Methods
multiplyInteger()
Точное умножение десятичной строки на неотрицательное целое (столбиком).
public
static multiplyInteger(string $decimal, string $integer) : string
Parameters
- $decimal : string
- $integer : string
Return values
stringnormalize()
Приводит десятичную строку к канонической форме («007.50» → «7.5»).
public
static normalize(string $decimal) : string
Parameters
- $decimal : string
Return values
stringshift()
Умножает десятичную строку на 10^exponent сдвигом точки.
public
static shift(string $decimal, int $exponent) : string
Parameters
- $decimal : string
- $exponent : int
Return values
stringcanonical()
Канонизация цифровой пары: срез ведущих нулей (позиция точки уменьшается, возможно до отрицательной: «0.005» → «5», −2) и хвостовых нулей дробной части; чистый ноль — («», 0).
private
static canonical(string $digits, int $point) : array{0: string, 1: int}
Parameters
- $digits : string
- $point : int
Return values
array{0: string, 1: int}compose()
Собирает каноническую строку из знака, цифр и позиции точки.
private
static compose(string $sign, string $digits, int $point) : string
Паддинг нулями выполняется без ветвлений (str_pad игнорирует длину меньше текущей); результат обязан пройти инвариант канонической формы — нарушение означает ошибку вызывающего кода.
Parameters
- $sign : string
- $digits : string
- $point : int
Tags
Return values
stringmultiplyDigits()
Умножение последовательностей цифр столбиком (без точки и знака).
private
static multiplyDigits(string $left, string $right) : string
Parameters
- $left : string
- $right : string
Return values
stringparse()
Разбирает строку на знак и каноническую пару «цифры + позиция точки».
private
static parse(string $decimal) : array{0: string, 1: string, 2: int}
Parameters
- $decimal : string