CloudCastle UnitConvertor

Decimal
in package

FinalYes

Точная арифметика десятичных строк без 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
string

normalize()

Приводит десятичную строку к канонической форме («007.50» → «7.5»).

public static normalize(string $decimal) : string
Parameters
$decimal : string
Return values
string

shift()

Умножает десятичную строку на 10^exponent сдвигом точки.

public static shift(string $decimal, int $exponent) : string
Parameters
$decimal : string
$exponent : int
Return values
string

canonical()

Канонизация цифровой пары: срез ведущих нулей (позиция точки уменьшается, возможно до отрицательной: «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
throws
MathException

при нарушении канонической формы

Return values
string

multiplyDigits()

Умножение последовательностей цифр столбиком (без точки и знака).

private static multiplyDigits(string $left, string $right) : string
Parameters
$left : string
$right : string
Return values
string

parse()

Разбирает строку на знак и каноническую пару «цифры + позиция точки».

private static parse(string $decimal) : array{0: string, 1: string, 2: int}
Parameters
$decimal : string
Return values
array{0: string, 1: string, 2: int}
On this page

Search results