CloudCastle UnitConvertor

BcCalculator
in package
implements CalculatorInterface

FinalYes

Арифметика произвольной точности для финансово-критичных конверсий, где накопление 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
string

compare()

Трёхстороннее сравнение.

public compare(float|string $left, float|string $right) : int
Parameters
$left : float|string
$right : float|string
Attributes
#[Override]
Return values
int

div()

Деление.

public div(float|string $left, float|string $right) : string
Parameters
$left : float|string
$right : float|string
Tags
throws
MathException

при делении на ноль

Attributes
#[Override]
Return values
string

mul()

Умножение.

public mul(float|string $left, float|string $right) : string
Parameters
$left : float|string
$right : float|string
Attributes
#[Override]
Return values
string

normalize()

Валидация и нормализация входа к десятичной строке.

public normalize(int|float|string $value) : string
Parameters
$value : int|float|string
Tags
throws
MathException

при NAN/INF или нечисловой строке

Attributes
#[Override]
Return values
string

round()

Округление до заданного числа знаков (полу-вверх) без потери точности.

public round(float|string $value, int $scale) : string
Parameters
$value : float|string
$scale : int
Attributes
#[Override]
Return values
string

sub()

Вычитание.

public sub(float|string $left, float|string $right) : string
Parameters
$left : float|string
$right : float|string
Attributes
#[Override]
Return values
string

toFloat()

Приведение к float (с потерей точности сверх float64 — по определению).

public toFloat(float|string $value) : float
Parameters
$value : float|string
Attributes
#[Override]
Return values
float

big()

Значение как {@see BigDecimal} с развёрнутой экспонентой.

private big(float|string $value) : BigDecimal
Parameters
$value : float|string
Return values
BigDecimal

decimal()

Разворачивает значение в десятичную строку, понятную BigDecimal: int/float — через точное представление, строки «1.5e3» — в «1500».

private decimal(int|float|string $value) : numeric-string
Parameters
$value : int|float|string
Tags
throws
MathException

при нечисловой строке

Return values
numeric-string

expandExponent()

Разворачивает экспоненциальную запись в позиционную: «1.5e3» → «1500».

private expandExponent(string $lower) : string

Мантисса — обычная десятичная строка, поэтому разворот — точный сдвиг десятичной точки, который выполняет Decimal::shift().

Parameters
$lower : string
Return values
string

trimZeros()

Убирает незначащие нули дробной части («1.5000» → «1.5», «2.0» → «2»).

private trimZeros(string $value) : numeric-string
Parameters
$value : string
Return values
numeric-string
On this page

Search results