BcCalculator
in package
implements
CalculatorInterface
Арифметика произвольной точности для финансово-критичных конверсий, где накопление float-погрешности недопустимо.
Вычисления выполняет BigDecimal из библиотеки cloud-castle/match; этот класс отвечает только за нормализацию входа — разворот float и экспоненциальной записи («1.5e3») в десятичные строки, которые BigDecimal принимает. Точность по умолчанию — максимальная точность match (Constants::MAX_SCALE, 100 знаков после запятой).
Table of Contents
Interfaces
- CalculatorInterface
- Арифметика конвертера: реализация выбирает представление чисел — нативные float (максимальная скорость) или строки BCMath (произвольная точность для финансово-критичных вычислений).
Properties
- $scale : int
Methods
- __construct() : mixed
- add() : string
- Сложение.
- compare() : int
- Трёхстороннее сравнение.
- div() : string
- Деление.
- mul() : string
- Умножение.
- normalize() : string
- Валидация и нормализация входа к десятичной строке.
- round() : string
- Округление до заданного числа знаков (полу-вверх) без потери точности.
- sub() : string
- Вычитание.
- toFloat() : float
- Приведение к float (с потерей точности сверх float64 — по определению).
- big() : BigDecimal
- Значение как {@see BigDecimal} с развёрнутой экспонентой.
- decimal() : numeric-string
- Разворачивает значение в десятичную строку, понятную BigDecimal: int/float — через точное представление, строки «1.5e3» — в «1500».
- expandExponent() : string
- Разворачивает экспоненциальную запись в позиционную: «1.5e3» → «1500».
- trimZeros() : numeric-string
- Убирает незначащие нули дробной части («1.5000» → «1.5», «2.0» → «2»).
Properties
$scale read-only
private
int
$scale
= Constants::MAX_SCALE
Methods
__construct()
public
__construct([int $scale = Constants::MAX_SCALE ]) : mixed
Parameters
- $scale : int = Constants::MAX_SCALE
-
число знаков после запятой промежуточных делений
add()
Сложение.
public
add(float|string $left, float|string $right) : string
Parameters
- $left : float|string
- $right : float|string
Attributes
- #[Override]
Return values
stringcompare()
Трёхстороннее сравнение.
public
compare(float|string $left, float|string $right) : int
Parameters
- $left : float|string
- $right : float|string
Attributes
- #[Override]
Return values
intdiv()
Деление.
public
div(float|string $left, float|string $right) : string
Parameters
- $left : float|string
- $right : float|string
Tags
Attributes
- #[Override]
Return values
stringmul()
Умножение.
public
mul(float|string $left, float|string $right) : string
Parameters
- $left : float|string
- $right : float|string
Attributes
- #[Override]
Return values
stringnormalize()
Валидация и нормализация входа к десятичной строке.
public
normalize(int|float|string $value) : string
Parameters
- $value : int|float|string
Tags
Attributes
- #[Override]
Return values
stringround()
Округление до заданного числа знаков (полу-вверх) без потери точности.
public
round(float|string $value, int $scale) : string
Parameters
- $value : float|string
- $scale : int
Attributes
- #[Override]
Return values
stringsub()
Вычитание.
public
sub(float|string $left, float|string $right) : string
Parameters
- $left : float|string
- $right : float|string
Attributes
- #[Override]
Return values
stringtoFloat()
Приведение к float (с потерей точности сверх float64 — по определению).
public
toFloat(float|string $value) : float
Parameters
- $value : float|string
Attributes
- #[Override]
Return values
floatbig()
Значение как {@see BigDecimal} с развёрнутой экспонентой.
private
big(float|string $value) : BigDecimal
Parameters
- $value : float|string
Return values
BigDecimaldecimal()
Разворачивает значение в десятичную строку, понятную BigDecimal: int/float — через точное представление, строки «1.5e3» — в «1500».
private
decimal(int|float|string $value) : numeric-string
Parameters
- $value : int|float|string
Tags
Return values
numeric-stringexpandExponent()
Разворачивает экспоненциальную запись в позиционную: «1.5e3» → «1500».
private
expandExponent(string $lower) : string
Мантисса — обычная десятичная строка, поэтому разворот — точный сдвиг десятичной точки, который выполняет Decimal::shift().
Parameters
- $lower : string
Return values
stringtrimZeros()
Убирает незначащие нули дробной части («1.5000» → «1.5», «2.0» → «2»).
private
trimZeros(string $value) : numeric-string
Parameters
- $value : string