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