Creatio development guide
PDF
Документация по разработке
Описание платформы
Это документация Creatio версии 7.12.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-2019.

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

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