round.js (6986B)
1 "use strict"; 2 3 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 4 5 Object.defineProperty(exports, "__esModule", { 6 value: true 7 }); 8 exports.createRoundNumber = exports.createRound = void 0; 9 10 var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 11 12 var _factory = require("../../utils/factory.js"); 13 14 var _collection = require("../../utils/collection.js"); 15 16 var _number = require("../../utils/number.js"); 17 18 var _algorithm = require("../../type/matrix/utils/algorithm11.js"); 19 20 var _algorithm2 = require("../../type/matrix/utils/algorithm12.js"); 21 22 var _algorithm3 = require("../../type/matrix/utils/algorithm14.js"); 23 24 var _index = require("../../plain/number/index.js"); 25 26 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 27 28 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 29 30 var NO_INT = 'Number of decimals in function round must be an integer'; 31 var name = 'round'; 32 var dependencies = ['typed', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix']; 33 var createRound = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 34 var typed = _ref.typed, 35 matrix = _ref.matrix, 36 equalScalar = _ref.equalScalar, 37 zeros = _ref.zeros, 38 BigNumber = _ref.BigNumber, 39 DenseMatrix = _ref.DenseMatrix; 40 var algorithm11 = (0, _algorithm.createAlgorithm11)({ 41 typed: typed, 42 equalScalar: equalScalar 43 }); 44 var algorithm12 = (0, _algorithm2.createAlgorithm12)({ 45 typed: typed, 46 DenseMatrix: DenseMatrix 47 }); 48 var algorithm14 = (0, _algorithm3.createAlgorithm14)({ 49 typed: typed 50 }); 51 /** 52 * Round a value towards the nearest integer. 53 * For matrices, the function is evaluated element wise. 54 * 55 * Syntax: 56 * 57 * math.round(x) 58 * math.round(x, n) 59 * 60 * Examples: 61 * 62 * math.round(3.22) // returns number 3 63 * math.round(3.82) // returns number 4 64 * math.round(-4.2) // returns number -4 65 * math.round(-4.7) // returns number -5 66 * math.round(3.22, 1) // returns number 3.2 67 * math.round(3.88, 1) // returns number 3.9 68 * math.round(-4.21, 1) // returns number -4.2 69 * math.round(-4.71, 1) // returns number -4.7 70 * math.round(math.pi, 3) // returns number 3.142 71 * math.round(123.45678, 2) // returns number 123.46 72 * 73 * const c = math.complex(3.2, -2.7) 74 * math.round(c) // returns Complex 3 - 3i 75 * 76 * math.round([3.2, 3.8, -4.7]) // returns Array [3, 4, -5] 77 * 78 * See also: 79 * 80 * ceil, fix, floor 81 * 82 * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded 83 * @param {number | BigNumber | Array} [n=0] Number of decimals 84 * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value 85 */ 86 87 return typed(name, _objectSpread(_objectSpread({}, roundNumberSignatures), {}, { 88 Complex: function Complex(x) { 89 return x.round(); 90 }, 91 'Complex, number': function ComplexNumber(x, n) { 92 if (n % 1) { 93 throw new TypeError(NO_INT); 94 } 95 96 return x.round(n); 97 }, 98 'Complex, BigNumber': function ComplexBigNumber(x, n) { 99 if (!n.isInteger()) { 100 throw new TypeError(NO_INT); 101 } 102 103 var _n = n.toNumber(); 104 105 return x.round(_n); 106 }, 107 'number, BigNumber': function numberBigNumber(x, n) { 108 if (!n.isInteger()) { 109 throw new TypeError(NO_INT); 110 } 111 112 return new BigNumber(x).toDecimalPlaces(n.toNumber()); 113 }, 114 BigNumber: function BigNumber(x) { 115 return x.toDecimalPlaces(0); 116 }, 117 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) { 118 if (!n.isInteger()) { 119 throw new TypeError(NO_INT); 120 } 121 122 return x.toDecimalPlaces(n.toNumber()); 123 }, 124 Fraction: function Fraction(x) { 125 return x.round(); 126 }, 127 'Fraction, number': function FractionNumber(x, n) { 128 if (n % 1) { 129 throw new TypeError(NO_INT); 130 } 131 132 return x.round(n); 133 }, 134 'Array | Matrix': function ArrayMatrix(x) { 135 // deep map collection, skip zeros since round(0) = 0 136 return (0, _collection.deepMap)(x, this, true); 137 }, 138 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) { 139 return algorithm11(x, y, this, false); 140 }, 141 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) { 142 return algorithm14(x, y, this, false); 143 }, 144 'number | Complex | BigNumber, SparseMatrix': function numberComplexBigNumberSparseMatrix(x, y) { 145 // check scalar is zero 146 if (equalScalar(x, 0)) { 147 // do not execute algorithm, result will be a zero matrix 148 return zeros(y.size(), y.storage()); 149 } 150 151 return algorithm12(y, x, this, true); 152 }, 153 'number | Complex | BigNumber, DenseMatrix': function numberComplexBigNumberDenseMatrix(x, y) { 154 // check scalar is zero 155 if (equalScalar(x, 0)) { 156 // do not execute algorithm, result will be a zero matrix 157 return zeros(y.size(), y.storage()); 158 } 159 160 return algorithm14(y, x, this, true); 161 }, 162 'Array, number | BigNumber': function ArrayNumberBigNumber(x, y) { 163 // use matrix implementation 164 return algorithm14(matrix(x), y, this, false).valueOf(); 165 }, 166 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) { 167 // use matrix implementation 168 return algorithm14(matrix(y), x, this, true).valueOf(); 169 } 170 })); 171 }); 172 exports.createRound = createRound; 173 var roundNumberSignatures = { 174 number: _index.roundNumber, 175 'number, number': function numberNumber(x, n) { 176 if (!(0, _number.isInteger)(n)) { 177 throw new TypeError(NO_INT); 178 } 179 180 if (n < 0 || n > 15) { 181 throw new Error('Number of decimals in function round must be in the range of 0-15'); 182 } 183 184 return (0, _index.roundNumber)(x, n); 185 } 186 }; 187 var createRoundNumber = /* #__PURE__ */(0, _factory.factory)(name, ['typed'], function (_ref2) { 188 var typed = _ref2.typed; 189 return typed(name, roundNumberSignatures); 190 }); 191 exports.createRoundNumber = createRoundNumber;