1 | import { each, isNil } from '@antv/util';
|
2 |
|
3 |
|
4 | export function calBase(a, b) {
|
5 | var e = Math.E;
|
6 | var value;
|
7 | if (b >= 0) {
|
8 | value = Math.pow(e, Math.log(b) / a);
|
9 | }
|
10 | else {
|
11 | value = Math.pow(e, Math.log(-b) / a) * -1;
|
12 | }
|
13 | return value;
|
14 | }
|
15 | export function log(a, b) {
|
16 | if (a === 1) {
|
17 | return 1;
|
18 | }
|
19 | return Math.log(b) / Math.log(a);
|
20 | }
|
21 | export function getLogPositiveMin(values, base, max) {
|
22 | if (isNil(max)) {
|
23 | max = Math.max.apply(null, values);
|
24 | }
|
25 | var positiveMin = max;
|
26 | each(values, function (value) {
|
27 | if (value > 0 && value < positiveMin) {
|
28 | positiveMin = value;
|
29 | }
|
30 | });
|
31 | if (positiveMin === max) {
|
32 | positiveMin = max / base;
|
33 | }
|
34 | if (positiveMin > 1) {
|
35 | positiveMin = 1;
|
36 | }
|
37 | return positiveMin;
|
38 | }
|
39 | function digitLength(num) {
|
40 |
|
41 | var eSplit = num.toString().split(/[eE]/);
|
42 | var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);
|
43 | return len > 0 ? len : 0;
|
44 | }
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | export function precisionAdd(num1, num2) {
|
53 | var num1Digits = digitLength(num1);
|
54 | var num2Digits = digitLength(num2);
|
55 | var baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));
|
56 | return (num1 * baseNum + num2 * baseNum) / baseNum;
|
57 | }
|
58 |
|
\ | No newline at end of file |