CloudCastle UnitConvertor

Quantity
in package
implements JsonSerializable, Stringable

FinalYes

Иммутабельная величина: значение + единица измерения.

Любая операция возвращает новую величину. Арифметика физически корректна: сложение конвертирует операнды к общей единице, умножение и деление величин выполняют размерностный анализ (10 м / 2 с = 5 м/с), а абсолютные температурные шкалы защищены от бессмысленных операций — сумма 30 °C + 20 °C отклоняется, разность возвращает дельту Δ°C.

Table of Contents

Interfaces

JsonSerializable
Stringable

Properties

$converter  : Converter
$unitObject  : Unit
$value  : float

Methods

__toString()  : string
Строковое представление: «5.25 km».
abs()  : self
Абсолютное значение.
add()  : self
Сложение. Числовой операнд трактуется в единице этой величины.
avg()  : self
Среднее арифметическое набора (в единице первой величины).
ceil()  : self
Округление вверх.
code()  : string
Код единицы измерения.
compareTo()  : int
Трёхстороннее сравнение с конверсией операнда к этой единице.
div()  : self
Деление на скаляр или величину (размерностный анализ).
equals()  : bool
Равенство с допуском (в этой единице).
floor()  : self
Округление вниз.
format()  : string
Форматирует величину: «5,25 км» (локализация и плюрализация — Formatter).
fromArray()  : self
Восстанавливает величину из массива {@see Quantity::toArray()}.
greaterThan()  : bool
Строго больше.
greaterThanOrEqual()  : bool
Больше или равно.
humanize()  : string
Человекочитаемое представление в лучшей единице: 1500 м → «1,5 км».
in()  : self
Создаёт величину для конкретного конвертера (используется конвертером).
invert()  : self
Обратная величина: 1/x с обращением размерности.
isNegative()  : bool
Отрицательное ли значение.
isPositive()  : bool
Положительное ли значение.
isSameDimension()  : bool
Совпадают ли размерности величин.
isZero()  : bool
Нулевое ли значение.
jsonSerialize()  : array{value: float, unit: string}
Сериализация в JSON.
lessThan()  : bool
Строго меньше.
lessThanOrEqual()  : bool
Меньше или равно.
max()  : self
Максимальная величина набора.
min()  : self
Минимальная величина набора.
mul()  : self
Умножение на скаляр или величину (размерностный анализ).
negate()  : self
Смена знака.
of()  : self
Создаёт величину через общий конвертер.
parse()  : self
Разбирает строку «5.5 km» или составную «5 ft 3 in» (общий конвертер).
pow()  : self
Возведение в целую степень (размерность возводится вместе со значением).
round()  : self
Округление значения.
simplify()  : self
Автоматический выбор «лучшей» единицы той же системы: 1500 м → 1.5 км.
sub()  : self
Вычитание. Разность двух точек аффинной шкалы — дельта: 30 °C − 20 °C = 10 Δ°C; вычитание дельты сдвигает точку шкалы.
sum()  : self
Сумма набора величин (в единице первой).
to()  : self
Конвертирует величину в другую единицу.
toAll()  : array<string, self>
Величина во всех совместимых единицах категории или в заданных целях.
toArray()  : array{value: float, unit: string}
Сериализация в массив.
toBase()  : self
Конвертирует в базовую единицу категории.
toCompound()  : array<string, self>
Раскладывает величину на составные единицы: 1.5 ч → 1 ч 30 мин.
tryParse()  : self|null
Разбор без исключений: null при ошибке.
unit()  : Unit
Единица измерения.
value()  : float
Числовое значение.
__construct()  : mixed
affineDifference()  : self
Разность точек аффинной шкалы — дельта в парной дельта-единице.
assertScalable()  : void
Отклоняет масштабирование точек аффинных шкал (умножение 30 °C бессмысленно).
candidateScore()  : array{0: int, 1: float}
Ключ ранжирования кандидата: массивы сравниваются поэлементно, поэтому [0, x] (значение ≥1: меньше — лучше) всегда выигрывает у [1, −y] (значение <1: больше — лучше, ближе к единице).
derived()  : self
Строит величину результата размерностного анализа.
extremum()  : self
Общий поиск экстремума набора.
isSimplifyCandidate()  : bool
Пригодна ли единица для simplify: та же система, линейная, не дельта.
pickBestUnit()  : Unit, 1: float}
Ищет единицу той же системы, дающую значение, ближайшее к диапазону 1…999.
siValue()  : float
Значение в когерентных СИ-единицах размерности.
withDeltaApplied()  : self
Прибавляет дельту к точке шкалы (знак задаёт направление).

Properties

Methods

__toString()

Строковое представление: «5.25 km».

public __toString() : string
Attributes
#[Override]
Return values
string

abs()

Абсолютное значение.

public abs() : self
Return values
self

add()

Сложение. Числовой операнд трактуется в единице этой величины.

public add(self|float $other) : self

Для абсолютных шкал допустимо только прибавление дельты: 20 °C + 5 Δ°C = 25 °C, а 20 °C + 20 °C отклоняется.

Parameters
$other : self|float
Return values
self

avg()

Среднее арифметическое набора (в единице первой величины).

public static avg(iterable<string|int, self> $quantities) : self
Parameters
$quantities : iterable<string|int, self>
Return values
self

ceil()

Округление вверх.

public ceil() : self
Return values
self

code()

Код единицы измерения.

public code() : string
Return values
string

compareTo()

Трёхстороннее сравнение с конверсией операнда к этой единице.

public compareTo(self $other) : int
Parameters
$other : self
Return values
int

div()

Деление на скаляр или величину (размерностный анализ).

public div(self|float $other) : self
Parameters
$other : self|float
Return values
self

equals()

Равенство с допуском (в этой единице).

public equals(self $other[, float $tolerance = 0.0 ]) : bool
Parameters
$other : self
$tolerance : float = 0.0
Return values
bool

floor()

Округление вниз.

public floor() : self
Return values
self

format()

Форматирует величину: «5,25 км» (локализация и плюрализация — Formatter).

public format([int|null $precision = null ][, string $locale = 'ru' ][, bool $long = false ]) : string
Parameters
$precision : int|null = null
$locale : string = 'ru'
$long : bool = false
Return values
string

fromArray()

Восстанавливает величину из массива {@see Quantity::toArray()}.

public static fromArray(array<string|int, mixed> $data) : self
Parameters
$data : array<string|int, mixed>

массив с ключами value и unit

Return values
self

greaterThan()

Строго больше.

public greaterThan(self $other) : bool
Parameters
$other : self
Return values
bool

greaterThanOrEqual()

Больше или равно.

public greaterThanOrEqual(self $other) : bool
Parameters
$other : self
Return values
bool

humanize()

Человекочитаемое представление в лучшей единице: 1500 м → «1,5 км».

public humanize([string $locale = 'ru' ][, int|null $precision = 2 ]) : string
Parameters
$locale : string = 'ru'
$precision : int|null = 2
Return values
string

in()

Создаёт величину для конкретного конвертера (используется конвертером).

public static in(float $value, Unit $unit, Converter $converter) : self
Parameters
$value : float
$unit : Unit
$converter : Converter
Return values
self

invert()

Обратная величина: 1/x с обращением размерности.

public invert() : self
Return values
self

isNegative()

Отрицательное ли значение.

public isNegative() : bool
Return values
bool

isPositive()

Положительное ли значение.

public isPositive() : bool
Return values
bool

isSameDimension()

Совпадают ли размерности величин.

public isSameDimension(self $other) : bool
Parameters
$other : self
Return values
bool

isZero()

Нулевое ли значение.

public isZero() : bool
Return values
bool

jsonSerialize()

Сериализация в JSON.

public jsonSerialize() : array{value: float, unit: string}
Attributes
#[Override]
Return values
array{value: float, unit: string}

lessThan()

Строго меньше.

public lessThan(self $other) : bool
Parameters
$other : self
Return values
bool

lessThanOrEqual()

Меньше или равно.

public lessThanOrEqual(self $other) : bool
Parameters
$other : self
Return values
bool

max()

Максимальная величина набора.

public static max(iterable<string|int, self> $quantities) : self
Parameters
$quantities : iterable<string|int, self>
Return values
self

min()

Минимальная величина набора.

public static min(iterable<string|int, self> $quantities) : self
Parameters
$quantities : iterable<string|int, self>
Return values
self

mul()

Умножение на скаляр или величину (размерностный анализ).

public mul(self|float $other) : self
Parameters
$other : self|float
Return values
self

negate()

Смена знака.

public negate() : self
Return values
self

of()

Создаёт величину через общий конвертер.

public static of(int|float $value, string|Unit $unit) : self
Parameters
$value : int|float
$unit : string|Unit
Return values
self

parse()

Разбирает строку «5.5 km» или составную «5 ft 3 in» (общий конвертер).

public static parse(string $input) : self
Parameters
$input : string
Return values
self

pow()

Возведение в целую степень (размерность возводится вместе со значением).

public pow(int $exponent) : self
Parameters
$exponent : int
Return values
self

round()

Округление значения.

public round([int $precision = 0 ]) : self
Parameters
$precision : int = 0
Return values
self

simplify()

Автоматический выбор «лучшей» единицы той же системы: 1500 м → 1.5 км.

public simplify() : self

Аффинные и нелинейные единицы возвращаются без изменения.

Return values
self

sub()

Вычитание. Разность двух точек аффинной шкалы — дельта: 30 °C − 20 °C = 10 Δ°C; вычитание дельты сдвигает точку шкалы.

public sub(self|float $other) : self
Parameters
$other : self|float
Return values
self

sum()

Сумма набора величин (в единице первой).

public static sum(iterable<string|int, self> $quantities) : self
Parameters
$quantities : iterable<string|int, self>
Return values
self

to()

Конвертирует величину в другую единицу.

public to(string|Unit $unit) : self
Parameters
$unit : string|Unit
Return values
self

toAll()

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

public toAll([null|array<int, string|Unit$targets = null ]) : array<string, self>
Parameters
$targets : null|array<int, string|Unit> = null
Return values
array<string, self>

toArray()

Сериализация в массив.

public toArray() : array{value: float, unit: string}
Return values
array{value: float, unit: string}

toBase()

Конвертирует в базовую единицу категории.

public toBase() : self
Return values
self

toCompound()

Раскладывает величину на составные единицы: 1.5 ч → 1 ч 30 мин.

public toCompound(array<int, string|Unit$targets) : array<string, self>
Parameters
$targets : array<int, string|Unit>
Return values
array<string, self>

tryParse()

Разбор без исключений: null при ошибке.

public static tryParse(string $input) : self|null
Parameters
$input : string
Return values
self|null

unit()

Единица измерения.

public unit() : Unit
Return values
Unit

value()

Числовое значение.

public value() : float
Return values
float

affineDifference()

Разность точек аффинной шкалы — дельта в парной дельта-единице.

private affineDifference(self $other) : self
Parameters
$other : self
Return values
self

assertScalable()

Отклоняет масштабирование точек аффинных шкал (умножение 30 °C бессмысленно).

private assertScalable(string $operation) : void
Parameters
$operation : string

candidateScore()

Ключ ранжирования кандидата: массивы сравниваются поэлементно, поэтому [0, x] (значение ≥1: меньше — лучше) всегда выигрывает у [1, −y] (значение <1: больше — лучше, ближе к единице).

private candidateScore(float $converted) : array{0: int, 1: float}
Parameters
$converted : float
Return values
array{0: int, 1: float}

derived()

Строит величину результата размерностного анализа.

private derived(float $siValue, Dimension $dimension) : self
Parameters
$siValue : float
$dimension : Dimension
Return values
self

extremum()

Общий поиск экстремума набора.

private static extremum(iterable<string|int, self> $quantities, int $direction) : self
Parameters
$quantities : iterable<string|int, self>
$direction : int
Return values
self

isSimplifyCandidate()

Пригодна ли единица для simplify: та же система, линейная, не дельта.

private isSimplifyCandidate(Unit $candidate) : bool
Parameters
$candidate : Unit
Return values
bool

pickBestUnit()

Ищет единицу той же системы, дающую значение, ближайшее к диапазону 1…999.

private pickBestUnit() : Unit, 1: float}

Сама величина — всегда допустимый стартовый кандидат (охранные условия simplify уже отсекли аффинные и нелинейные), поэтому лучший существует безусловно. Ранжирование — лексикографический ключ Quantity::candidateScore().

Return values
Unit, 1: float}

siValue()

Значение в когерентных СИ-единицах размерности.

private siValue() : float
Return values
float

withDeltaApplied()

Прибавляет дельту к точке шкалы (знак задаёт направление).

private withDeltaApplied(self $delta, float $sign) : self
Parameters
$delta : self
$sign : float
Return values
self
On this page

Search results