@syncfusion/ej2-calculate 35.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/.eslintrc.json +263 -0
  2. package/README.md +132 -0
  3. package/base.d.ts +4 -0
  4. package/base.js +4 -0
  5. package/common.d.ts +4 -0
  6. package/common.js +4 -0
  7. package/dist/ej2-calculate.umd.min.js +11 -0
  8. package/dist/ej2-calculate.umd.min.js.map +1 -0
  9. package/dist/es6/ej2-calculate.es2015.js +24801 -0
  10. package/dist/es6/ej2-calculate.es2015.js.map +1 -0
  11. package/dist/es6/ej2-calculate.es5.js +27229 -0
  12. package/dist/es6/ej2-calculate.es5.js.map +1 -0
  13. package/dist/global/ej2-calculate.min.js +11 -0
  14. package/dist/global/ej2-calculate.min.js.map +1 -0
  15. package/dist/global/index.d.ts +14 -0
  16. package/formulas.d.ts +4 -0
  17. package/formulas.js +4 -0
  18. package/index.d.ts +4 -0
  19. package/index.js +4 -0
  20. package/license +10 -0
  21. package/package.json +30 -0
  22. package/src/base/calculate-model.d.ts +4 -0
  23. package/src/base/calculate-model.js +0 -0
  24. package/src/base/calculate.d.ts +1105 -0
  25. package/src/base/calculate.js +4720 -0
  26. package/src/base/index.d.ts +8 -0
  27. package/src/base/index.js +7 -0
  28. package/src/base/parser.d.ts +208 -0
  29. package/src/base/parser.js +1512 -0
  30. package/src/common/address.d.ts +59 -0
  31. package/src/common/address.js +96 -0
  32. package/src/common/cell-ref.d.ts +32 -0
  33. package/src/common/cell-ref.js +112 -0
  34. package/src/common/common.d.ts +44 -0
  35. package/src/common/common.js +134 -0
  36. package/src/common/enum.d.ts +94 -0
  37. package/src/common/enum.js +97 -0
  38. package/src/common/index.d.ts +9 -0
  39. package/src/common/index.js +8 -0
  40. package/src/common/interface.d.ts +122 -0
  41. package/src/common/interface.js +0 -0
  42. package/src/common/l10n.d.ts +24 -0
  43. package/src/common/l10n.js +54 -0
  44. package/src/common/number-date.d.ts +26 -0
  45. package/src/common/number-date.js +38 -0
  46. package/src/common/sheet-info.d.ts +10 -0
  47. package/src/common/sheet-info.js +17 -0
  48. package/src/common/sort.d.ts +17 -0
  49. package/src/common/sort.js +44 -0
  50. package/src/formulas/array.d.ts +47 -0
  51. package/src/formulas/array.js +718 -0
  52. package/src/formulas/basic.d.ts +47 -0
  53. package/src/formulas/basic.js +181 -0
  54. package/src/formulas/complex-numbers.d.ts +207 -0
  55. package/src/formulas/complex-numbers.js +549 -0
  56. package/src/formulas/database.d.ts +152 -0
  57. package/src/formulas/database.js +579 -0
  58. package/src/formulas/date-time-extra.d.ts +97 -0
  59. package/src/formulas/date-time-extra.js +415 -0
  60. package/src/formulas/date-time-intl.d.ts +57 -0
  61. package/src/formulas/date-time-intl.js +309 -0
  62. package/src/formulas/date-time.d.ts +164 -0
  63. package/src/formulas/date-time.js +1021 -0
  64. package/src/formulas/engineering-base.d.ts +150 -0
  65. package/src/formulas/engineering-base.js +404 -0
  66. package/src/formulas/engineering-bessel.d.ts +65 -0
  67. package/src/formulas/engineering-bessel.js +167 -0
  68. package/src/formulas/engineering-convert.d.ts +35 -0
  69. package/src/formulas/engineering-convert.js +120 -0
  70. package/src/formulas/engineering-misc.d.ts +64 -0
  71. package/src/formulas/engineering-misc.js +168 -0
  72. package/src/formulas/financial-amortization-ecma.d.ts +87 -0
  73. package/src/formulas/financial-amortization-ecma.js +288 -0
  74. package/src/formulas/financial-annuity.d.ts +104 -0
  75. package/src/formulas/financial-annuity.js +419 -0
  76. package/src/formulas/financial-bond-helpers.d.ts +106 -0
  77. package/src/formulas/financial-bond-helpers.js +190 -0
  78. package/src/formulas/financial-cashflow.d.ts +47 -0
  79. package/src/formulas/financial-cashflow.js +203 -0
  80. package/src/formulas/financial-coupons.d.ts +227 -0
  81. package/src/formulas/financial-coupons.js +810 -0
  82. package/src/formulas/financial-depreciation.d.ts +64 -0
  83. package/src/formulas/financial-depreciation.js +247 -0
  84. package/src/formulas/financial-rates.d.ts +54 -0
  85. package/src/formulas/financial-rates.js +140 -0
  86. package/src/formulas/financial-securities.d.ts +126 -0
  87. package/src/formulas/financial-securities.js +488 -0
  88. package/src/formulas/formula-math-helpers.d.ts +212 -0
  89. package/src/formulas/formula-math-helpers.js +599 -0
  90. package/src/formulas/formula-module-base.d.ts +54 -0
  91. package/src/formulas/formula-module-base.js +125 -0
  92. package/src/formulas/formula-owner.d.ts +17 -0
  93. package/src/formulas/formula-owner.js +0 -0
  94. package/src/formulas/index.d.ts +68 -0
  95. package/src/formulas/index.js +67 -0
  96. package/src/formulas/information-advanced.d.ts +44 -0
  97. package/src/formulas/information-advanced.js +157 -0
  98. package/src/formulas/information-ecma.d.ts +33 -0
  99. package/src/formulas/information-ecma.js +88 -0
  100. package/src/formulas/information-extra.d.ts +146 -0
  101. package/src/formulas/information-extra.js +351 -0
  102. package/src/formulas/information.d.ts +34 -0
  103. package/src/formulas/information.js +78 -0
  104. package/src/formulas/logical-extra.d.ts +75 -0
  105. package/src/formulas/logical-extra.js +217 -0
  106. package/src/formulas/logical.d.ts +83 -0
  107. package/src/formulas/logical.js +296 -0
  108. package/src/formulas/lookup-array.d.ts +98 -0
  109. package/src/formulas/lookup-array.js +364 -0
  110. package/src/formulas/lookup-ref-extra.d.ts +64 -0
  111. package/src/formulas/lookup-ref-extra.js +180 -0
  112. package/src/formulas/lookup-ref.d.ts +84 -0
  113. package/src/formulas/lookup-ref.js +263 -0
  114. package/src/formulas/lookup.d.ts +114 -0
  115. package/src/formulas/lookup.js +881 -0
  116. package/src/formulas/math-aggregate.d.ts +74 -0
  117. package/src/formulas/math-aggregate.js +376 -0
  118. package/src/formulas/math-ceiling-ecma.d.ts +42 -0
  119. package/src/formulas/math-ceiling-ecma.js +123 -0
  120. package/src/formulas/math-combinatorics.d.ts +75 -0
  121. package/src/formulas/math-combinatorics.js +290 -0
  122. package/src/formulas/math-misc.d.ts +164 -0
  123. package/src/formulas/math-misc.js +889 -0
  124. package/src/formulas/math-number.d.ts +76 -0
  125. package/src/formulas/math-number.js +261 -0
  126. package/src/formulas/math-rounding.d.ts +115 -0
  127. package/src/formulas/math-rounding.js +728 -0
  128. package/src/formulas/math-trig-hyperbolic.d.ts +55 -0
  129. package/src/formulas/math-trig-hyperbolic.js +113 -0
  130. package/src/formulas/math-trig.d.ts +165 -0
  131. package/src/formulas/math-trig.js +334 -0
  132. package/src/formulas/matrix-base.d.ts +13 -0
  133. package/src/formulas/matrix-base.js +169 -0
  134. package/src/formulas/matrix.d.ts +64 -0
  135. package/src/formulas/matrix.js +161 -0
  136. package/src/formulas/regression-ecma.d.ts +66 -0
  137. package/src/formulas/regression-ecma.js +234 -0
  138. package/src/formulas/statistical-advanced.d.ts +125 -0
  139. package/src/formulas/statistical-advanced.js +756 -0
  140. package/src/formulas/statistical-correlation.d.ts +75 -0
  141. package/src/formulas/statistical-correlation.js +198 -0
  142. package/src/formulas/statistical-dispersion.d.ts +108 -0
  143. package/src/formulas/statistical-dispersion.js +337 -0
  144. package/src/formulas/statistical-distribution-extended.d.ts +176 -0
  145. package/src/formulas/statistical-distribution-extended.js +668 -0
  146. package/src/formulas/statistical-distribution.d.ts +104 -0
  147. package/src/formulas/statistical-distribution.js +368 -0
  148. package/src/formulas/statistical-ecma.d.ts +95 -0
  149. package/src/formulas/statistical-ecma.js +392 -0
  150. package/src/formulas/statistical-extended.d.ts +136 -0
  151. package/src/formulas/statistical-extended.js +340 -0
  152. package/src/formulas/statistical-ifs.d.ts +46 -0
  153. package/src/formulas/statistical-ifs.js +180 -0
  154. package/src/formulas/statistical-moments.d.ts +84 -0
  155. package/src/formulas/statistical-moments.js +269 -0
  156. package/src/formulas/statistical-percentile.d.ts +56 -0
  157. package/src/formulas/statistical-percentile.js +195 -0
  158. package/src/formulas/statistical-sample-base.d.ts +14 -0
  159. package/src/formulas/statistical-sample-base.js +124 -0
  160. package/src/formulas/statistical.d.ts +135 -0
  161. package/src/formulas/statistical.js +542 -0
  162. package/src/formulas/text-advanced.d.ts +64 -0
  163. package/src/formulas/text-advanced.js +222 -0
  164. package/src/formulas/text-ecma.d.ts +54 -0
  165. package/src/formulas/text-ecma.js +106 -0
  166. package/src/formulas/text-extra.d.ts +216 -0
  167. package/src/formulas/text-extra.js +657 -0
  168. package/src/formulas/text.d.ts +125 -0
  169. package/src/formulas/text.js +628 -0
  170. package/src/global.js +1 -0
  171. package/src/index.d.ts +14 -0
  172. package/src/index.js +14 -0
  173. package/tslint.json +111 -0
@@ -0,0 +1,889 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ import { FormulasErrorsStrings, CommonErrors } from '../common/index';
15
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
16
+ import { isCellReference } from '../common/cell-ref';
17
+ import { FormulaModuleBase } from './formula-module-base';
18
+ /**
19
+ * Core numeric utilities: absolute value, random numbers, logarithms, powers, roots, factorials, and angle/unit conversions.
20
+ *
21
+ * Registers 14 functions including ABS, RAND, RANDBETWEEN, RADIANS, DEGREES, and others.
22
+ *
23
+ * @hidden
24
+ */
25
+ var MathMiscFormulas = /** @class */ (function (_super) {
26
+ __extends(MathMiscFormulas, _super);
27
+ /**
28
+ * @hidden
29
+ * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).
30
+ */
31
+ function MathMiscFormulas(owner) {
32
+ var _this = _super.call(this, owner) || this;
33
+ /** Formula definitions registered with {@link BasicFormulas}. */
34
+ _this.formulas = [
35
+ { formulaName: 'ABS', category: 'Math & Trig', description: 'Returns the absolute value of a number.' },
36
+ { formulaName: 'RAND', category: 'Math & Trig', description: 'Return a random number between 0 and 1.' },
37
+ { formulaName: 'RANDBETWEEN', category: 'Math & Trig', description: 'Returns an integer random number in a specified range.' },
38
+ { formulaName: 'RADIANS', category: 'Math & Trig', description: 'Converts degrees to radians.' },
39
+ { formulaName: 'DEGREES', category: 'Math & Trig', description: 'Converts radians to degrees.' },
40
+ { formulaName: 'PI', category: 'Math & Trig', description: 'Returns the value of pi.' },
41
+ { formulaName: 'MOD', category: 'Math & Trig', description: 'Returns a remainder after a number is divided by divisor.' },
42
+ { formulaName: 'FACT', category: 'Math & Trig', description: 'Returns the factorial of a number.' },
43
+ { formulaName: 'DECIMAL', category: 'Math & Trig', description: 'Converts a text representation of a number in a given base into a decimal number.' },
44
+ { formulaName: 'LN', category: 'Math & Trig', description: 'Returns the natural logarithm of a number.' },
45
+ { formulaName: 'LOG', category: 'Math & Trig', description: 'Returns the logarithm of a number to the base that you specify.' },
46
+ { formulaName: 'POWER', category: 'Math & Trig', description: 'Returns the result of a number raised to power.' },
47
+ { formulaName: 'SQRT', category: 'Math & Trig', description: 'Returns the square root of a positive number.' },
48
+ { formulaName: 'EXP', category: 'Math & Trig', description: 'Returns e raised to the power of the given number.' }
49
+ ];
50
+ return _this;
51
+ }
52
+ /**
53
+ * Returns the absolute value of a number.
54
+ *
55
+ * Excel: `ABS(...)`.
56
+ *
57
+ * @hidden
58
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
59
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * engine.computeFormula('=ABS(-5)');
64
+ * ```
65
+ */
66
+ MathMiscFormulas.prototype.ComputeABS = function () {
67
+ var args = [];
68
+ for (var _i = 0; _i < arguments.length; _i++) {
69
+ args[_i] = arguments[_i];
70
+ }
71
+ var argArr = args;
72
+ var cellvalue = '';
73
+ var absVal;
74
+ if (args.length === 0 || args.length > 1) {
75
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
76
+ }
77
+ if (argArr[0] === '') {
78
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
79
+ }
80
+ var argVal = argArr[0].split(this.parent.tic).join('').trim();
81
+ if (argVal === '' || (argArr[0].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {
82
+ return this.parent.getErrorStrings()[CommonErrors.Value];
83
+ }
84
+ if (this.parent.isCellReference(argArr[0])) {
85
+ cellvalue = this.parent.getValueFromArg(argArr[0]);
86
+ if (this.parent.getErrorStrings().indexOf(cellvalue) > -1) {
87
+ return cellvalue;
88
+ }
89
+ if (cellvalue === this.parent.trueValue) {
90
+ cellvalue = '1';
91
+ }
92
+ if (cellvalue === '' || cellvalue === this.parent.falseValue) {
93
+ cellvalue = '0';
94
+ }
95
+ absVal = this.parent.parseFloat(cellvalue);
96
+ if (isNaN(absVal) && !this.parent.isNumber(cellvalue)) {
97
+ return this.parent.getErrorStrings()[CommonErrors.Value];
98
+ }
99
+ }
100
+ else {
101
+ cellvalue = this.parent.getValueFromArg(argArr[0]).split(this.parent.tic).join();
102
+ if (cellvalue === this.parent.trueValue) {
103
+ cellvalue = '1';
104
+ }
105
+ if (cellvalue === this.parent.falseValue) {
106
+ cellvalue = '0';
107
+ }
108
+ if (this.parent.getErrorStrings().indexOf(cellvalue) > -1) {
109
+ return cellvalue;
110
+ }
111
+ absVal = this.parent.parseFloat(cellvalue);
112
+ if (isNaN(absVal) && !this.parent.isNumber(cellvalue)) {
113
+ return this.parent.getErrorStrings()[CommonErrors.Value];
114
+ }
115
+ }
116
+ return Math.abs(absVal);
117
+ };
118
+ /**
119
+ * Return a random number between 0 and 1.
120
+ *
121
+ * Excel: `RAND(...)`.
122
+ *
123
+ * @hidden
124
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
125
+ * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.
126
+ */
127
+ MathMiscFormulas.prototype.ComputeRAND = function () {
128
+ var args = [];
129
+ for (var _i = 0; _i < arguments.length; _i++) {
130
+ args[_i] = arguments[_i];
131
+ }
132
+ if (args.length === 1 && args[0] === '') {
133
+ args.length = 0;
134
+ }
135
+ if (args.length > 0) {
136
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
137
+ }
138
+ return Math.random().toString();
139
+ };
140
+ /**
141
+ * Returns an integer random number in a specified range.
142
+ *
143
+ * Excel: `RANDBETWEEN(...)`.
144
+ *
145
+ * @hidden
146
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
147
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
148
+ */
149
+ MathMiscFormulas.prototype.ComputeRANDBETWEEN = function () {
150
+ var _this = this;
151
+ var args = [];
152
+ for (var _i = 0; _i < arguments.length; _i++) {
153
+ args[_i] = arguments[_i];
154
+ }
155
+ var min;
156
+ var max;
157
+ if (args.length === 1 && args[0] === '') {
158
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
159
+ }
160
+ else if (args.length !== 2) {
161
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
162
+ }
163
+ var errCollection = this.parent.getErrorStrings();
164
+ var processArgs = function (orgValue) {
165
+ var actualValue;
166
+ actualValue = _this.parent.getValueFromArg(orgValue);
167
+ if (errCollection.indexOf(actualValue) > -1) {
168
+ return actualValue;
169
+ }
170
+ if (_this.parent.isCellReference(orgValue)) {
171
+ if (actualValue === '') {
172
+ actualValue = '0';
173
+ }
174
+ else if (orgValue.indexOf(':') > -1 || actualValue.match(/^(\d*\.\d+|\d+)\s*[+\-*/]\s*(\d*\.\d+|\d+)$/)) {
175
+ return errCollection[CommonErrors.Value];
176
+ }
177
+ }
178
+ else {
179
+ if (actualValue === '') {
180
+ return errCollection[CommonErrors.NA];
181
+ }
182
+ else if (orgValue.indexOf(_this.parent.tic) > -1 && _this.parent.removeTics(orgValue).match(/^(\d*\.\d+|\d+)\s*[+*]\s*(\d*\.\d+|\d+)$/)) {
183
+ return errCollection[CommonErrors.Value];
184
+ }
185
+ else if (actualValue.indexOf(_this.parent.tic) > -1) {
186
+ actualValue = _this.parent.removeTics(actualValue);
187
+ if (actualValue.indexOf(':') > -1) {
188
+ var values = actualValue.split(':');
189
+ if (values.length <= 3) {
190
+ if (!_this.parent.isNumber(values[0]) || !_this.parent.isNumber(values[1])) {
191
+ return errCollection[CommonErrors.Value];
192
+ }
193
+ var hours = Number(values[0]) + Number((Number(values[1]) / 60));
194
+ if (values.length === 3) {
195
+ if (!_this.parent.isNumber(values[2])) {
196
+ return errCollection[CommonErrors.Value];
197
+ }
198
+ hours += Number(Number(values[2]) / 3600);
199
+ }
200
+ actualValue = (hours / 24).toString();
201
+ }
202
+ else {
203
+ return errCollection[CommonErrors.Value];
204
+ }
205
+ }
206
+ }
207
+ if (actualValue.split('%').length === 2 && _this.parent.isNumber(actualValue.split('%')[0])) {
208
+ actualValue = (Number(actualValue.split('%')[0]) * 0.01).toString();
209
+ }
210
+ }
211
+ actualValue = parseFloat(actualValue);
212
+ if (isNaN(actualValue)) {
213
+ return errCollection[CommonErrors.Value];
214
+ }
215
+ return actualValue;
216
+ };
217
+ max = processArgs(args[1]);
218
+ if (errCollection.indexOf(max) > -1) {
219
+ return max;
220
+ }
221
+ min = processArgs(args[0]);
222
+ if (errCollection.indexOf(min) > -1) {
223
+ return min;
224
+ }
225
+ if (min === 0 && max === 0) {
226
+ return '0';
227
+ }
228
+ else if (max < min) {
229
+ return errCollection[CommonErrors.Num];
230
+ }
231
+ else {
232
+ min = Math.ceil(min);
233
+ max = Math.floor(max);
234
+ return Math.floor((Math.random() * ((max - min) + 1)) + min);
235
+ }
236
+ };
237
+ /**
238
+ * Converts degrees to radians.
239
+ *
240
+ * Excel: `RADIANS(...)`.
241
+ *
242
+ * @hidden
243
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
244
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
245
+ */
246
+ MathMiscFormulas.prototype.ComputeRADIANS = function () {
247
+ var args = [];
248
+ for (var _i = 0; _i < arguments.length; _i++) {
249
+ args[_i] = arguments[_i];
250
+ }
251
+ var value;
252
+ var errCollection = this.parent.getErrorStrings();
253
+ if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1) ||
254
+ (args[0].split('!').length === 2 && args[0].indexOf(this.parent.tic) === -1)) {
255
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
256
+ }
257
+ else if (args.length > 1) {
258
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
259
+ }
260
+ else if (args[0].indexOf(':') > -1 || args[0].split(this.parent.tic).join('').trim() === '' ||
261
+ args[0].split(this.parent.tic).join('').trim() === '!' || args[0].split('!').length === 2) {
262
+ return errCollection[CommonErrors.Value];
263
+ }
264
+ value = this.parent.getValueFromArg(args[0]).trim();
265
+ if (errCollection.indexOf(value) > -1) {
266
+ return value;
267
+ }
268
+ if ((value.indexOf(this.parent.tic) > -1 && args[0].indexOf(this.parent.tic) === -1) ||
269
+ value.split(this.parent.tic).length > 3) {
270
+ return errCollection[CommonErrors.Value];
271
+ }
272
+ if (value.toUpperCase() === this.parent.trueValue) {
273
+ value = '1';
274
+ }
275
+ else if (value.toUpperCase() === this.parent.falseValue) {
276
+ value = '0';
277
+ }
278
+ else if (value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {
279
+ value = (Number(value.split('%')[0]) / 100).toString();
280
+ }
281
+ value = this.parent.parseFloat(value.split(this.parent.tic).join(''));
282
+ if (!isNaN(value)) {
283
+ value = Math.PI * (value) / 180;
284
+ }
285
+ else {
286
+ if (this.parent.isCellReference(args[0]) || args[0].indexOf(this.parent.tic) > -1) {
287
+ return errCollection[CommonErrors.Value];
288
+ }
289
+ else {
290
+ return errCollection[CommonErrors.Name];
291
+ }
292
+ }
293
+ return value;
294
+ };
295
+ /**
296
+ * Converts radians to degrees.
297
+ *
298
+ * Excel: `DEGREES(...)`.
299
+ *
300
+ * @hidden
301
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
302
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
303
+ */
304
+ MathMiscFormulas.prototype.ComputeDEGREES = function () {
305
+ var args = [];
306
+ for (var _i = 0; _i < arguments.length; _i++) {
307
+ args[_i] = arguments[_i];
308
+ }
309
+ var errCollection = this.parent.getErrorStrings();
310
+ if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {
311
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
312
+ }
313
+ else if (args.length !== 1) {
314
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
315
+ }
316
+ var val = this.parent.getValueFromArg(args[0]).trim();
317
+ if (errCollection.indexOf(val) > -1) {
318
+ return val;
319
+ }
320
+ if (this.parent.isCellReference(args[0])) {
321
+ if (val === '' || val.indexOf(':') > -1) {
322
+ return 0;
323
+ }
324
+ else if (val.indexOf(this.parent.tic) > -1 || (isNaN(Number(val)) && !isNaN(parseInt(val, 10)))) {
325
+ return errCollection[CommonErrors.Value];
326
+ }
327
+ }
328
+ else if (val.indexOf('"TRUE"') > -1) {
329
+ return errCollection[CommonErrors.Value];
330
+ }
331
+ val = val.split(this.parent.tic).join('');
332
+ if (val.toUpperCase() === this.parent.trueValue) {
333
+ val = '1';
334
+ }
335
+ else if (val.toUpperCase() === this.parent.falseValue) {
336
+ val = '0';
337
+ }
338
+ else if (val.indexOf('%') > -1) {
339
+ val = (Number(val.split('%')[0]) / 100).toString();
340
+ }
341
+ else if (val.toUpperCase().match(/[A-Z]/) || isNaN(parseInt(val, 10))) {
342
+ return errCollection[CommonErrors.Value];
343
+ }
344
+ return parseFloat(val) * (180 / (Math.PI));
345
+ };
346
+ /**
347
+ * Returns the value of pi.
348
+ *
349
+ * Excel: `PI(...)`.
350
+ *
351
+ * @hidden
352
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
353
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
354
+ */
355
+ MathMiscFormulas.prototype.ComputePI = function () {
356
+ var args = [];
357
+ for (var _i = 0; _i < arguments.length; _i++) {
358
+ args[_i] = arguments[_i];
359
+ }
360
+ var result;
361
+ if (args && args[0] !== '') {
362
+ result = this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
363
+ }
364
+ else {
365
+ result = Math.PI;
366
+ }
367
+ return result;
368
+ };
369
+ /**
370
+ * Returns a remainder after a number is divided by divisor.
371
+ *
372
+ * Excel: `MOD(...)`.
373
+ *
374
+ * @hidden
375
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
376
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
377
+ */
378
+ MathMiscFormulas.prototype.ComputeMOD = function () {
379
+ var args = [];
380
+ for (var _i = 0; _i < arguments.length; _i++) {
381
+ args[_i] = arguments[_i];
382
+ }
383
+ var value;
384
+ if (isNullOrUndefined(args) || args.length !== 2) {
385
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
386
+ }
387
+ if (args[1] === '' && !args[0].includes('"')) {
388
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.Div];
389
+ }
390
+ else if (args[0] === '' && !args[1].includes('"')) {
391
+ return 0;
392
+ }
393
+ for (var i = 0; i < args.length; i++) {
394
+ var argVal = args[i].split(this.parent.tic).join('').trim();
395
+ if (argVal === '' || (args[i].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {
396
+ return this.parent.getErrorStrings()[CommonErrors.Value];
397
+ }
398
+ if (isCellReference(args[i])) {
399
+ value = this.parent.getValueFromArg(args[i]) || '0';
400
+ value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;
401
+ if (value.toUpperCase().match(/[A-Z]/) || value.includes('"') || !this.parent.isNumber(value)) {
402
+ return this.parent.getErrorStrings()[CommonErrors.Value];
403
+ }
404
+ }
405
+ else {
406
+ value = this.parent.getValueFromArg(args[i].split(this.parent.tic).join(''));
407
+ value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;
408
+ if (this.parent.getErrorStrings().indexOf(value) > -1) {
409
+ return value;
410
+ }
411
+ }
412
+ args[i] = value;
413
+ }
414
+ var value1 = args[0];
415
+ var value2 = args[1];
416
+ if (value2 === '0' || value2 === '') {
417
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.Div];
418
+ }
419
+ else if (value1 === '0' || value1 === '') {
420
+ return 0;
421
+ }
422
+ value1 = parseFloat(value1);
423
+ value2 = parseFloat(value2);
424
+ var result = ((value1 % value2) + value2) % value2;
425
+ if (isNaN(result)) {
426
+ return this.parent.getErrorStrings()[CommonErrors.Name];
427
+ }
428
+ return result;
429
+ };
430
+ /**
431
+ * Returns the factorial of a number.
432
+ *
433
+ * Excel: `FACT(...)`.
434
+ *
435
+ * @hidden
436
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
437
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
438
+ */
439
+ MathMiscFormulas.prototype.ComputeFACT = function () {
440
+ var args = [];
441
+ for (var _i = 0; _i < arguments.length; _i++) {
442
+ args[_i] = arguments[_i];
443
+ }
444
+ var fact = 1;
445
+ var errCollection = this.parent.getErrorStrings();
446
+ if (args[0] === '') {
447
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
448
+ }
449
+ else if (args.length !== 1) {
450
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
451
+ }
452
+ var getValue = args[0];
453
+ if (this.parent.isCellReference(args[0]) || isNaN(Number(getValue.split(this.parent.tic).join('')))) {
454
+ getValue = this.parent.getValueFromArg(args[0]);
455
+ if (errCollection.indexOf(getValue) > -1) {
456
+ return getValue;
457
+ }
458
+ if (getValue.startsWith(this.parent.tic) ||
459
+ getValue.match(/^(\d*\.\d+|\d+)\s*[+\-*/]\s*(\d*\.\d+|\d+)$/)) {
460
+ return errCollection[CommonErrors.Value];
461
+ }
462
+ else if (getValue === '') {
463
+ return 1;
464
+ }
465
+ }
466
+ getValue = getValue.split(this.parent.tic).join('').trim();
467
+ if (errCollection.indexOf(getValue) > -1) {
468
+ return getValue;
469
+ }
470
+ if (getValue.toUpperCase() === this.parent.trueValue || getValue.toUpperCase() === this.parent.falseValue) {
471
+ return 1;
472
+ }
473
+ if (getValue.indexOf('%') > -1) {
474
+ getValue = (Number(getValue.split('%')[0]) / 100).toString();
475
+ }
476
+ var value = parseInt(getValue, 10);
477
+ if ((value < 0) || (value > 170)) {
478
+ return errCollection[CommonErrors.Num];
479
+ }
480
+ else if (getValue.toUpperCase().match(/[A-Z]/) || getValue === '') {
481
+ return errCollection[CommonErrors.Value];
482
+ }
483
+ else if (getValue.indexOf(':') > -1) {
484
+ return 0;
485
+ }
486
+ for (var i = 1; i <= value; i++) {
487
+ fact = fact * i;
488
+ }
489
+ return fact;
490
+ };
491
+ /**
492
+ * Converts a text representation of a number in a given base into a decimal number.
493
+ *
494
+ * Excel: `DECIMAL(...)`.
495
+ *
496
+ * @hidden
497
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
498
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
499
+ */
500
+ MathMiscFormulas.prototype.ComputeDECIMAL = function () {
501
+ var args = [];
502
+ for (var _i = 0; _i < arguments.length; _i++) {
503
+ args[_i] = arguments[_i];
504
+ }
505
+ var value;
506
+ var specialChars = /[@#$%^&*()?:{}|<>+-]/g;
507
+ if (isNullOrUndefined(args) || args.length !== 2) {
508
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
509
+ }
510
+ else if (args[0].match(specialChars)) {
511
+ return this.parent.getErrorStrings()[CommonErrors.Num];
512
+ }
513
+ else if (args[1].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[1].split(this.parent.tic).join('')))) {
514
+ return this.parent.getErrorStrings()[CommonErrors.Value];
515
+ }
516
+ else {
517
+ var val = void 0;
518
+ var val1 = void 0;
519
+ if (this.parent.isCellReference(args[0].toString())) {
520
+ val = this.parent.getValueFromArg(args[0]);
521
+ }
522
+ else {
523
+ val = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');
524
+ }
525
+ if (this.parent.isCellReference(args[1].toString())) {
526
+ val1 = this.parent.getValueFromArg(args[1]);
527
+ }
528
+ else {
529
+ val1 = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');
530
+ }
531
+ var num = parseInt(val, 10);
532
+ var radix = parseInt(val1, 10);
533
+ if (this.parent.getErrorStrings().indexOf(val) > -1) {
534
+ return val;
535
+ }
536
+ else if (this.parent.getErrorStrings().indexOf(val1) > -1) {
537
+ return val1;
538
+ }
539
+ else if (val === '' && val1 !== '') {
540
+ return 0;
541
+ }
542
+ else if (val === '' || (num < 0) || (!isNaN(num) && !Number.isInteger(parseFloat(val)))) {
543
+ return this.parent.getErrorStrings()[CommonErrors.Num];
544
+ }
545
+ else if (val1 === '' || (radix < 2 || radix > 36) || isNaN(radix)) {
546
+ return this.parent.getErrorStrings()[CommonErrors.Num];
547
+ }
548
+ else if (isNaN(this.parent.parseFloat(val)) && this.parent.parseFloat(val1) <= 10) {
549
+ return this.parent.getErrorStrings()[CommonErrors.Num];
550
+ }
551
+ value = parseInt(val, parseInt(val1, 10));
552
+ }
553
+ return isNaN(value) ? this.parent.getErrorStrings()[CommonErrors.Num] : value;
554
+ };
555
+ /**
556
+ * Returns the natural logarithm of a number.
557
+ *
558
+ * Excel: `LN(...)`.
559
+ *
560
+ * @hidden
561
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
562
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
563
+ */
564
+ MathMiscFormulas.prototype.ComputeLN = function () {
565
+ var args = [];
566
+ for (var _i = 0; _i < arguments.length; _i++) {
567
+ args[_i] = arguments[_i];
568
+ }
569
+ var cellvalue;
570
+ var errCollection = this.parent.getErrorStrings();
571
+ if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {
572
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
573
+ }
574
+ else if (args.length === 0 || args.length > 1) {
575
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
576
+ }
577
+ cellvalue = this.parent.getValueFromArg(args[0]);
578
+ if (errCollection.indexOf(cellvalue) > -1) {
579
+ return cellvalue;
580
+ }
581
+ if (cellvalue.toUpperCase() === this.parent.trueValue) {
582
+ cellvalue = '1';
583
+ }
584
+ else if (cellvalue.toUpperCase() === this.parent.falseValue) {
585
+ cellvalue = '0';
586
+ }
587
+ if (!this.parent.isCellReference(args[0])) {
588
+ cellvalue = this.parent.removeTics(cellvalue);
589
+ if (cellvalue.trim() === '') {
590
+ return errCollection[CommonErrors.Value];
591
+ }
592
+ }
593
+ if (cellvalue.split('%').length === 2 && this.parent.isNumber(cellvalue.split('%')[0])) {
594
+ cellvalue = (Number(cellvalue.split('%')[0]) * 0.01).toString();
595
+ }
596
+ cellvalue = this.parent.parseFloat(cellvalue);
597
+ if (cellvalue <= 0) {
598
+ return errCollection[CommonErrors.Num];
599
+ }
600
+ else if (isNaN(cellvalue)) {
601
+ return errCollection[CommonErrors.Value];
602
+ }
603
+ return Math.log(cellvalue);
604
+ };
605
+ /**
606
+ * Returns the logarithm of a number to the base that you specify.
607
+ *
608
+ * Excel: `LOG(...)`.
609
+ *
610
+ * @hidden
611
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
612
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
613
+ */
614
+ MathMiscFormulas.prototype.ComputeLOG = function () {
615
+ var _this = this;
616
+ var args = [];
617
+ for (var _i = 0; _i < arguments.length; _i++) {
618
+ args[_i] = arguments[_i];
619
+ }
620
+ var orgNumValue;
621
+ var orgBaseValue;
622
+ var errCollection = this.parent.getErrorStrings();
623
+ if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {
624
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
625
+ }
626
+ else if (args.length > 2) {
627
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
628
+ }
629
+ var processArgs = function (orgValue) {
630
+ var actualValue = _this.parent.getValueFromArg(orgValue);
631
+ if (actualValue === _this.parent.trueValue) {
632
+ actualValue = '1';
633
+ }
634
+ else if (actualValue === _this.parent.falseValue) {
635
+ actualValue = '0';
636
+ }
637
+ if (!_this.parent.isCellReference(orgValue) && actualValue !== '') {
638
+ if (actualValue.indexOf(_this.parent.tic) > -1 && errCollection.indexOf(actualValue.split(_this.parent.tic).join('')) === -1) {
639
+ actualValue = _this.parent.removeTics(actualValue);
640
+ if (actualValue.trim() === '') {
641
+ return errCollection[CommonErrors.Value];
642
+ }
643
+ else if (actualValue.indexOf(':') > -1) {
644
+ var values = actualValue.split(':');
645
+ if (values.length <= 3) {
646
+ if (!_this.parent.isNumber(values[0]) || !_this.parent.isNumber(values[1])) {
647
+ return errCollection[CommonErrors.Value];
648
+ }
649
+ var hours = Number(values[0]) + Number((Number(values[1]) / 60));
650
+ if (values.length === 3) {
651
+ if (!_this.parent.isNumber(values[2])) {
652
+ return errCollection[CommonErrors.Value];
653
+ }
654
+ hours += Number(Number(values[2]) / 3600);
655
+ }
656
+ actualValue = (hours / 24).toString();
657
+ }
658
+ else {
659
+ return errCollection[CommonErrors.Value];
660
+ }
661
+ }
662
+ }
663
+ if (actualValue.split('%').length === 2 && _this.parent.isNumber(actualValue.split('%')[0])) {
664
+ actualValue = (Number(actualValue.split('%')[0]) * 0.01).toString();
665
+ }
666
+ }
667
+ return actualValue;
668
+ };
669
+ if (!isNullOrUndefined(args[0])) {
670
+ orgNumValue = processArgs(args[0]);
671
+ if (errCollection.indexOf(orgNumValue) > -1) {
672
+ return orgNumValue;
673
+ }
674
+ orgNumValue = this.parent.parseFloat(orgNumValue);
675
+ }
676
+ orgBaseValue = 10;
677
+ if (!isNullOrUndefined(args[1])) {
678
+ orgBaseValue = processArgs(args[1]);
679
+ if (errCollection.indexOf(orgBaseValue) > -1) {
680
+ return orgBaseValue;
681
+ }
682
+ orgBaseValue = this.parent.parseFloat(orgBaseValue);
683
+ }
684
+ orgNumValue = Number(orgNumValue);
685
+ if (isNaN(orgNumValue) || isNaN(orgBaseValue)) {
686
+ return errCollection[CommonErrors.Value];
687
+ }
688
+ else if (orgNumValue <= 0 || orgBaseValue <= 0) {
689
+ return errCollection[CommonErrors.Num];
690
+ }
691
+ else if (orgBaseValue === 1) {
692
+ return errCollection[CommonErrors.DivZero];
693
+ }
694
+ return ((Math.log(orgNumValue) / Math.LN10) / (Math.log(orgBaseValue) / Math.LN10)).toString();
695
+ };
696
+ /**
697
+ * Returns the result of a number raised to power.
698
+ *
699
+ * Excel: `POWER(...)`.
700
+ *
701
+ * @hidden
702
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
703
+ * @returns {boolean} - Boolean result, nested-formula numeric string (`"0"`/`"1"`), or an Excel error token.
704
+ */
705
+ MathMiscFormulas.prototype.ComputePOWER = function () {
706
+ var _this = this;
707
+ var args = [];
708
+ for (var _i = 0; _i < arguments.length; _i++) {
709
+ args[_i] = arguments[_i];
710
+ }
711
+ var power;
712
+ var errCollection = this.parent.getErrorStrings();
713
+ if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {
714
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
715
+ }
716
+ else if (args.length > 2) {
717
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
718
+ }
719
+ else if (args[0].trim() === '' && args[1].trim() === '') {
720
+ return errCollection[CommonErrors.Num];
721
+ }
722
+ var processArgs = function (actualValue) {
723
+ var value = _this.parent.getValueFromArg(actualValue);
724
+ if (errCollection.indexOf(value) > -1) {
725
+ return value;
726
+ }
727
+ if (value.toUpperCase() === _this.parent.trueValue) {
728
+ value = '1';
729
+ }
730
+ else if (value.toUpperCase() === _this.parent.falseValue) {
731
+ value = '0';
732
+ }
733
+ if (value.indexOf(_this.parent.tic) > -1) {
734
+ value = _this.parent.removeTics(value);
735
+ if (actualValue.indexOf(_this.parent.tic) === -1 || value.trim() === '') {
736
+ return errCollection[CommonErrors.Value];
737
+ }
738
+ }
739
+ if (value.split('%').length === 2 && _this.parent.isNumber(value.split('%')[0])) {
740
+ value = (Number(value.split('%')[0]) / 100).toString();
741
+ }
742
+ else if (value.indexOf('/') > -1 && _this.parent.isNumber(value.split('/').join(''))) {
743
+ return errCollection[CommonErrors.Num];
744
+ }
745
+ value = _this.parent.parseFloat(value);
746
+ if (isNaN(value)) {
747
+ return errCollection[CommonErrors.Value];
748
+ }
749
+ return value;
750
+ };
751
+ var numValue = processArgs(args[0]);
752
+ if (errCollection.indexOf(numValue) > -1) {
753
+ return numValue;
754
+ }
755
+ var powValue = processArgs(args[1]);
756
+ if (errCollection.indexOf(powValue) > -1) {
757
+ return powValue;
758
+ }
759
+ if (!isNaN(numValue) && !isNaN(powValue)) {
760
+ if (numValue === 0 && powValue < 0) {
761
+ return errCollection[CommonErrors.DivZero];
762
+ }
763
+ if (numValue === 0 && powValue === 0) {
764
+ return errCollection[CommonErrors.Num];
765
+ }
766
+ power = Math.pow(numValue, powValue);
767
+ if (isNaN(power) || power === Infinity) {
768
+ return errCollection[CommonErrors.Num];
769
+ }
770
+ }
771
+ else {
772
+ return errCollection[CommonErrors.Value];
773
+ }
774
+ return power.toString();
775
+ };
776
+ /**
777
+ * Returns the square root of a positive number.
778
+ *
779
+ * Excel: `SQRT(...)`.
780
+ *
781
+ * @hidden
782
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
783
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
784
+ */
785
+ MathMiscFormulas.prototype.ComputeSQRT = function () {
786
+ var args = [];
787
+ for (var _i = 0; _i < arguments.length; _i++) {
788
+ args[_i] = arguments[_i];
789
+ }
790
+ var sqrtValue;
791
+ var arrValue = args[0];
792
+ if (args.length === 0 || args.length > 1 || arrValue === '') {
793
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
794
+ }
795
+ else if (arrValue.split(this.parent.tic).join('').trim() === '') {
796
+ return this.parent.getErrorStrings()[CommonErrors.Value];
797
+ }
798
+ if (this.parent.isCellReference(arrValue)) {
799
+ sqrtValue = this.parent.getValueFromArg(arrValue) || '0';
800
+ if (sqrtValue.indexOf(this.parent.tic) > -1) {
801
+ return this.parent.getErrorStrings()[CommonErrors.Value];
802
+ }
803
+ }
804
+ else {
805
+ if (arrValue.indexOf(this.parent.tic) > -1 && (arrValue.split(this.parent.tic).join('') === this.parent.trueValue ||
806
+ arrValue.split(this.parent.tic).join('') === this.parent.falseValue)) {
807
+ return this.parent.getErrorStrings()[CommonErrors.Value];
808
+ }
809
+ sqrtValue = this.parent.getValueFromArg(arrValue).split(this.parent.tic).join('');
810
+ }
811
+ if (this.parent.getErrorStrings().indexOf(sqrtValue) > -1) {
812
+ return sqrtValue;
813
+ }
814
+ sqrtValue = sqrtValue === this.parent.trueValue ? '1' : sqrtValue === this.parent.falseValue ? '0' : sqrtValue;
815
+ var parsedValue = this.parent.parseFloat(sqrtValue);
816
+ if (parsedValue < 0) {
817
+ return this.parent.getErrorStrings()[CommonErrors.Num];
818
+ }
819
+ else if (isNaN(parsedValue) ||
820
+ (arrValue.indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(arrValue)))) {
821
+ var dateTimeCheck = this.parent.hostParseDate(isNaN(parsedValue) ?
822
+ sqrtValue : arrValue.split(this.parent.tic).join(''));
823
+ if (dateTimeCheck.isDate || dateTimeCheck.isTime) {
824
+ sqrtValue = dateTimeCheck.value;
825
+ }
826
+ else {
827
+ return this.parent.getErrorStrings()[CommonErrors.Value];
828
+ }
829
+ }
830
+ return Math.sqrt(this.parent.parseFloat(sqrtValue));
831
+ };
832
+ /**
833
+ * Returns e raised to the power of the given number.
834
+ *
835
+ * Excel: `EXP(...)`.
836
+ *
837
+ * @hidden
838
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
839
+ * @returns {boolean} - Boolean result, nested-formula numeric string (`"0"`/`"1"`), or an Excel error token.
840
+ */
841
+ MathMiscFormulas.prototype.ComputeEXP = function () {
842
+ var args = [];
843
+ for (var _i = 0; _i < arguments.length; _i++) {
844
+ args[_i] = arguments[_i];
845
+ }
846
+ var orgNumValue;
847
+ var errCollection = this.parent.getErrorStrings();
848
+ if (args[0] === '' && args.length === 1) {
849
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
850
+ }
851
+ else if (args.length !== 1) {
852
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
853
+ }
854
+ else if (args[0].split(this.parent.tic).join('').trim() === '') {
855
+ return errCollection[CommonErrors.Value];
856
+ }
857
+ orgNumValue = this.parent.getValueFromArg(args[0]);
858
+ if (errCollection.indexOf(orgNumValue) > -1) {
859
+ return orgNumValue;
860
+ }
861
+ if (orgNumValue.indexOf(this.parent.tic) > -1 && (this.parent.isCellReference(args[0]) ||
862
+ isNaN(Number(orgNumValue.split(this.parent.tic).join(''))))) {
863
+ return errCollection[CommonErrors.Value];
864
+ }
865
+ orgNumValue = orgNumValue.split(this.parent.tic).join('');
866
+ if (orgNumValue === this.parent.trueValue) {
867
+ orgNumValue = '1';
868
+ }
869
+ else if ((orgNumValue === this.parent.falseValue) || (orgNumValue === '')) {
870
+ orgNumValue = '0';
871
+ }
872
+ else if (orgNumValue.indexOf('%') > -1) {
873
+ orgNumValue = (Number(orgNumValue.split('%')[0]) / 100).toString();
874
+ }
875
+ else if (orgNumValue.indexOf(':') > -1) {
876
+ return '0';
877
+ }
878
+ var logNumValue = this.parent.parseFloat(orgNumValue);
879
+ if (isNaN(logNumValue)) {
880
+ return errCollection[CommonErrors.Value];
881
+ }
882
+ else if (logNumValue > 709) {
883
+ return errCollection[CommonErrors.Num];
884
+ }
885
+ return Math.exp(logNumValue).toString();
886
+ };
887
+ return MathMiscFormulas;
888
+ }(FormulaModuleBase));
889
+ export { MathMiscFormulas };