Creatio development guide
Это документация Creatio версии 7.11.0. Мы рекомендуем использовать новую версию документации.

Модуль DecimalUtils

Glossary Item Box

Общие положения

Известно, что JavaScript выполняет расчеты с плавающей точкой с некоторой погрешностью. Например:

var a = 0.1 + 0.2; // a = 0.30000000000000004.
var b = 0.3 - 0.1; // b = 0.19999999999999998.

Для того чтобы избежать такого рода ошибок в расчетах, был создан модуль DecimalUtils.

Модуль DecimalUtils предназначен для выполнения математических операций с высокой точностью и генерации псевдослучайных чисел. В модуле определен класс Terrasoft.DecimalUtils, содержащий все необходимые методы для выполнения требуемых математических операций.

Конструктор

Экземпляр класса Terrasoft.DecimalUtils создается при помощи метода Ext.create() глобального объекта Ext.

Формат конструктора: var decimalUtils = Ext.create("Terrasoft.DecimalUtils" [, config]);

Опциональный параметр config является конфигурационным объектом конструктора. Свойства объекта config приведены в таблице 1.

Табл. 1. — Свойства конфигурационного объекта конструктора DecimalUtils

Название Тип Описание Значение по умолчанию
decimalPlaces (опционально) Number Число разрядов дробной части. Будет применено банковское округление всех расчетов до этого значения. 4
precision (опционально) Number Количество значащих цифр, с которым будут производиться внутренние расчеты. В него входят как целая, так и дробная часть. К примеру, число 123456789.123456789 содержит 18 значащих цифр — 9 разрядов целой части и 9 разрядов дробной. 24

Методы

Метод add()

Метод add() вычисляет сумму двух чисел. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.add(a, b);

Параметры метода приведены в таблице 2.

Табл. 2. — Параметры метода add()

Название Тип Описание
a Number Слагаемое
b Number Слагаемое

Пример использования:

// Создание объекта.
var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// Метод add() вернет 0.3.
decimalUtils.add(0.1, 0.2);        

Метод subtract()

Метод subtract() вычисляет результат вычитания двух чисел, т.е. разность. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.subtract(a, b);

Параметры метода приведены в таблице 3.

Табл. 3. — Параметры метода subtract()

Название Тип Описание
a Number Уменьшаемое
b Number Вычитаемое

Пример использования:

// Создание объекта.
var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// Метод subtract() вернет 0.2.
decimalUtils.subtract(0.3, 0.1);        

Метод multiply()

Метод multiply() вычисляет произведение двух чисел. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.multiply(a, b);

Параметры метода приведены в таблице 4.

Табл. 4. — Параметры метода multiply()

Название Тип Описание
a Number Множитель
b Number Множитель

Пример использования:

// Создание объекта.
var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// Метод multiply() вернет 0.03.
decimalUtils.multiply(0.3, 0.1);        

Метод divide()

Метод divide() вычисляет результат деления двух чисел, т.е частное. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.divide(a, b);

Параметры метода приведены в таблице 5.

Табл. 5. — Параметры метода divide()

Название Тип Описание
a Number Делимое
b Number Делитель

Пример использования:

// Создание объекта.
var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// Метод divide() вернет 3.
decimalUtils.divide(0.3, 0.1);        

Метод evaluate()

Метод evaluate() вычисляет результат переданного выражения. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.evaluate(expression);

Параметры метода приведены в таблице 6.

Табл. 6. — Параметры метода evaluate()

Название Тип Описание
expression Object Объект, свойства которого представляют собой математические операции (add, subtract, multiply, divide), a значения — массивы, содержащие значения типа Number или объекты с подвыражениями. Имеет рекурсивную структуру.

Пример использования:

// Создание объекта.
var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// В качестве аргумента передается конфигурационный объект.
decimalUtils.evaluate({
    // Операция сложения. Значения слагаемых передаются в массиве.
    add: [ // 1 + 7 = 8.
        // Первое слагаемое — вложенное выражение.
        {
            // Операция вычитания. Значения передаются в массиве.
            subtract: [ // 4 - 3 = 1.
                //Уменьшаемое — вложенное выражение. Содержит операцию умножения.
               { multiply: [2, 2] }, // 2 * 2 = 4.
               3
            ]
        },
       // Второе слагаемое — вложенное выражение.
       {
           // Операция вычитания. Значения передаются в массиве.
           subtract: [ // 5 - (-2) = 7.
                //Уменьшаемое — вложенное выражение. Содержит операцию деления.
              { divide: [10, 2] }, // 10 ÷ 2 = 5.
              -2
           ]
       }
    ]
});// Вернет 8.

К сведению

Массив аргументов операции может содержать произвольное количество элементов. Операция применяется к элементам слева направо.

Пример использования операции сложения с четырьмя аргументами:

var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
decimalUtils.evaluate({
  add: [1, 2, 3, 4]
});

Последовательность вычислений:

1 + 2 = 3; 
3 + 3 = 6;
6 + 4 = 10;

Пример использования операции вычитания с четырьмя аргументами:

var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
decimalUtils.evaluate({
  subtract: [10, 5, 3, 1]
});

Последовательность вычислений:

10 - 5 = 5; 
5 - 3 = 2;
2 - 1 = 1;

Метод toDecimalPlaces()

Метод toDecimalPlaces() округляет число c заданной точностью. Точность задается свойством decimalPlaces конфигурационного объекта, передаваемого в конструктор (см. пример ниже). Используется банковское округление. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.toDecimalPlaces(number);

Параметры метода приведены в таблице 7.

Табл. 7. — Параметры метода toDecimalPlaces()

Название Тип Описание
number Number Округляемое число.

Пример использования:

var decimalUtils =  Ext.create("Terrasoft.DecimalUtils", {
    decimalPlaces: 1
});
decimalUtils.toDecimalPlaces(1.15);        // Вернет 1.2

Метод roundValue()

Метод roundValue() округляет число с переданной в конфигурационном объекте точностью. Если точность не предана, округляет c точностью decimalPlaces, заданной в конфигурационном объекте конструктора. Применяется банковское округление. Тип возвращаемого значения — Number.

Формат метода: decimalUtils.roundValue(number [, config]);

Параметры метода приведены в таблице 8.

Табл. 8. — Параметры метода roundValue()

Название Тип Описание
number Number Округляемое число.
config (опционально) Object Объект с дополнительными параметрами.
config.decimalPlaces (опционально) Number Требуемое число разрядов дробной части.

Пример использования:

var decimalUtils =  Ext.create("Terrasoft.DecimalUtils", {
    decimalPlaces: 1
});
decimalUtils.roundValue(1.123456, {decimalPlaces: 4});// Вернет 1.1235.
decimalUtils.roundValue(1.123456);// Вернет 1.1.

Метод random()

Метод random() генерирует псевдослучайное число в диапазоне от 0  до 1 (не включая 0 и 1) с числом разрядов дробной части, равным decimalPlaces. Тип возвращаемого значения — Number.

Формат метода: var randomValue = decimalUtils.random();

Пример использования:

var decimalUtils = Ext.create("Terrasoft.DecimalUtils");
// Вернет случайное число. Например, 0.35.
var randomValue = decimalUtils.random();

© Terrasoft 2002-2018.

Был ли данный материал полезен?

Как можно улучшить эту статью?