TMoney

Деньги

Имеет конструкторы:

new Money(float: number): TMoney<'XXX'>;
new Money<C extends CurrencyCode>(float: number, currency: C): TMoney<C>;

При работе в скриптах предпочтительно использовать конструктор с указанием конкретной валюты:

const price = new Money(100.5, 'RUB');

Коды валют соответствуют стандарту ISO 4217.

Значения этого типа неизменяемые, так что методы мутации возвращают обновлённое значение, не меняя исходного.

const price = new Money(100.5, 'RUB');
const total = price.multiply(count);

Type parameters

  • C: CurrencyCode

Hierarchy

  • TMoney

Properties

Readonly cents

cents: number

Количество центов / копеек.

Readonly currency

currency: C

Валюта (буквенный код по стандарту ISO 4217).

Methods

add Deprecated

  • Сложение денежных значений.

    Deprecated

    Метод устарел. Используйте TMoney.addm.

    Известные проблемы:

    • потеря точности при работе с дробными значениями;
    • возможна ошибка округления, например, при суммировании:
      new Money(0.0, 'RUB')
      .add(new Money(49941947.50, 'RUB'))
      .add(new Money(70472042.00, 'RUB'))
      .add(new Money(24552195.08, 'RUB'))
      .add(new Money(19034739.10, 'RUB'))
      .add(new Money(17737647.61, 'RUB'))
      
      Результат: 181 738 571,27, ожидаемый результат: 181 738 571,29.

    Подробнее читайте в статье справки [«Неточные вычисления в JavaScript»] (https://elma365.com/ru/help/platform/js-imprecise-calculations.html).

    Используйте TMoney.addm, который гарантирует точность и проверяет совпадение валют.

    Parameters

    Returns TMoney<C>

addm

  • Сложение денежных значений с гарантией точности.

    Перед выполнением операции проверяется совпадение валют для предотвращения ошибки округления. Если валюты различаются, операция не выполнится и будет возвращена ошибка.

    Пример:

    const a = new Money(100.25, 'RUB');
    const b = new Money(200.75, 'RUB');
    const result = a.addm(b); // 301.00 RUB
    
    throws

    Error — Если валюты не совпадают.

    Parameters

    Returns TMoney<C>

asFloat

  • asFloat(): number
  • Приведение к десятичной дроби с точностью, соответствующей валюте.

    const salary = new Money(101, 'RUB');
    const salary2 = salary.multiply(0,001);
    salary2.asFloat(); // 0.1
    

    Returns number

multiply

  • multiply(k: number): TMoney<C>
  • Умножить на число с округлением центов в нижнюю сторону.

    Parameters

    • k: number

    Returns TMoney<C>