Модуль 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();