@ivujs/i-utils 1.1.14 → 1.1.16
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.
- package/dist/cjs/ID-card/index.cjs +87 -0
- package/dist/cjs/array/index.cjs +470 -0
- package/dist/cjs/clipboard/index.cjs +128 -0
- package/dist/cjs/color/index.cjs +193 -0
- package/dist/cjs/constants/date.cjs +178 -0
- package/dist/cjs/constants/id-card.cjs +52 -0
- package/dist/cjs/constants/keycode.cjs +117 -0
- package/dist/cjs/constants/lang.cjs +13 -0
- package/dist/cjs/constants/math.cjs +13 -0
- package/dist/cjs/constants/regexp.cjs +53 -0
- package/dist/cjs/constants/sort.cjs +15 -0
- package/dist/cjs/cookie/index.cjs +70 -0
- package/dist/cjs/crypto/aes/aes.cjs +480 -0
- package/dist/cjs/crypto/aes/index.cjs +27 -0
- package/dist/cjs/crypto/base32/base32.cjs +357 -0
- package/dist/cjs/crypto/base32/index.cjs +41 -0
- package/dist/cjs/crypto/base64/base64.cjs +348 -0
- package/dist/cjs/crypto/base64/index.cjs +59 -0
- package/dist/cjs/crypto/des/des.cjs +257 -0
- package/dist/cjs/crypto/des/index.cjs +28 -0
- package/dist/cjs/crypto/md5/index.cjs +24 -0
- package/dist/cjs/crypto/md5/md5.cjs +897 -0
- package/dist/cjs/crypto/sha/sha1/index.cjs +24 -0
- package/dist/cjs/crypto/sha/sha1/sha1.cjs +529 -0
- package/dist/cjs/crypto/sha/sha256/index.cjs +43 -0
- package/dist/cjs/crypto/sha/sha256/sha256.cjs +595 -0
- package/dist/cjs/crypto/sha/sha3/index.cjs +41 -0
- package/dist/cjs/crypto/sha/sha3/sha3.cjs +624 -0
- package/dist/cjs/crypto/sha/sha512/index.cjs +81 -0
- package/dist/cjs/crypto/sha/sha512/sha512.cjs +950 -0
- package/dist/cjs/crypto/sm/lib/asn1.cjs +149 -0
- package/dist/cjs/crypto/sm/lib/ec.cjs +315 -0
- package/dist/cjs/crypto/sm/lib/jsbn.cjs +1608 -0
- package/dist/cjs/crypto/sm/lib/sm3.cjs +158 -0
- package/dist/cjs/crypto/sm/lib/utils.cjs +170 -0
- package/dist/cjs/crypto/sm/sm2/index.cjs +112 -0
- package/dist/cjs/crypto/sm/sm2/sm2.cjs +231 -0
- package/dist/cjs/crypto/sm/sm3/index.cjs +15 -0
- package/dist/cjs/crypto/sm/sm3/sm3.cjs +93 -0
- package/dist/cjs/crypto/sm/sm4/index.cjs +27 -0
- package/dist/cjs/crypto/sm/sm4/sm4.cjs +327 -0
- package/dist/cjs/crypto/tea/index.cjs +25 -0
- package/dist/cjs/crypto/tea/tea.cjs +187 -0
- package/dist/cjs/date/index.cjs +1266 -0
- package/dist/cjs/desensitized/index.cjs +75 -0
- package/dist/cjs/device/index.cjs +151 -0
- package/dist/cjs/dom/index.cjs +129 -0
- package/dist/cjs/file/index.cjs +333 -0
- package/dist/cjs/function/index.cjs +69 -0
- package/dist/cjs/id/index.cjs +1 -1
- package/dist/cjs/index.cjs +398 -47
- package/dist/cjs/keycode/index.cjs +33 -0
- package/dist/cjs/math/index.cjs +278 -0
- package/dist/cjs/number/index.cjs +31 -0
- package/dist/cjs/object/index.cjs +272 -0
- package/dist/cjs/pagination/index.cjs +131 -0
- package/dist/cjs/random/index.cjs +24 -0
- package/dist/cjs/regexp/index.cjs +100 -0
- package/dist/cjs/storage/index.cjs +11 -0
- package/dist/cjs/storage/localStorage.cjs +37 -0
- package/dist/cjs/storage/sessionStorage.cjs +37 -0
- package/dist/cjs/string/index.cjs +358 -0
- package/dist/cjs/url/index.cjs +258 -0
- package/dist/cjs/validate/index.cjs +468 -0
- package/dist/cjs/weapp/index.cjs +142 -0
- package/dist/es/ID-card/index.d.ts +31 -0
- package/dist/es/ID-card/index.mjs +81 -0
- package/dist/es/array/index.d.ts +203 -0
- package/dist/es/array/index.mjs +441 -0
- package/dist/es/clipboard/index.d.ts +29 -0
- package/dist/es/clipboard/index.mjs +122 -0
- package/dist/es/color/index.d.ts +52 -0
- package/dist/es/color/index.mjs +183 -0
- package/dist/es/constants/date.d.ts +174 -0
- package/dist/es/constants/date.mjs +176 -0
- package/dist/es/constants/id-card.d.ts +43 -0
- package/dist/es/constants/id-card.mjs +50 -0
- package/dist/es/constants/index.d.ts +7 -0
- package/dist/es/constants/keycode.d.ts +103 -0
- package/dist/es/constants/keycode.mjs +115 -0
- package/dist/es/constants/lang.d.ts +4 -0
- package/dist/es/constants/lang.mjs +11 -0
- package/dist/es/constants/math.d.ts +4 -0
- package/dist/es/constants/math.mjs +11 -0
- package/dist/es/constants/regexp.d.ts +24 -0
- package/dist/es/constants/regexp.mjs +51 -0
- package/dist/es/constants/sort.d.ts +5 -0
- package/dist/es/constants/sort.mjs +13 -0
- package/dist/es/cookie/index.d.ts +29 -0
- package/dist/es/cookie/index.mjs +64 -0
- package/dist/es/crypto/aes/aes.d.ts +156 -0
- package/dist/es/crypto/aes/aes.mjs +478 -0
- package/dist/es/crypto/aes/index.d.ts +16 -0
- package/dist/es/crypto/aes/index.mjs +24 -0
- package/dist/es/crypto/base32/base32.d.ts +3 -0
- package/dist/es/crypto/base32/base32.mjs +353 -0
- package/dist/es/crypto/base32/index.d.ts +24 -0
- package/dist/es/crypto/base32/index.mjs +36 -0
- package/dist/es/crypto/base64/base64.d.ts +5 -0
- package/dist/es/crypto/base64/base64.mjs +342 -0
- package/dist/es/crypto/base64/index.d.ts +36 -0
- package/dist/es/crypto/base64/index.mjs +52 -0
- package/dist/es/crypto/des/des.d.ts +52 -0
- package/dist/es/crypto/des/des.mjs +255 -0
- package/dist/es/crypto/des/index.d.ts +14 -0
- package/dist/es/crypto/des/index.mjs +25 -0
- package/dist/es/crypto/index.d.ts +8 -0
- package/dist/es/crypto/md5/index.d.ts +13 -0
- package/dist/es/crypto/md5/index.mjs +21 -0
- package/dist/es/crypto/md5/md5.d.ts +144 -0
- package/dist/es/crypto/md5/md5.mjs +894 -0
- package/dist/es/crypto/sha/index.d.ts +4 -0
- package/dist/es/crypto/sha/sha1/index.d.ts +13 -0
- package/dist/es/crypto/sha/sha1/index.mjs +21 -0
- package/dist/es/crypto/sha/sha1/sha1.d.ts +2 -0
- package/dist/es/crypto/sha/sha1/sha1.mjs +526 -0
- package/dist/es/crypto/sha/sha256/index.d.ts +26 -0
- package/dist/es/crypto/sha/sha256/index.mjs +38 -0
- package/dist/es/crypto/sha/sha256/sha256.d.ts +4 -0
- package/dist/es/crypto/sha/sha256/sha256.mjs +590 -0
- package/dist/es/crypto/sha/sha3/index.d.ts +24 -0
- package/dist/es/crypto/sha/sha3/index.mjs +36 -0
- package/dist/es/crypto/sha/sha3/sha3.d.ts +4 -0
- package/dist/es/crypto/sha/sha3/sha3.mjs +619 -0
- package/dist/es/crypto/sha/sha512/index.d.ts +52 -0
- package/dist/es/crypto/sha/sha512/index.mjs +72 -0
- package/dist/es/crypto/sha/sha512/sha512.d.ts +8 -0
- package/dist/es/crypto/sha/sha512/sha512.mjs +941 -0
- package/dist/es/crypto/sm/index.d.ts +3 -0
- package/dist/es/crypto/sm/lib/asn1.d.ts +12 -0
- package/dist/es/crypto/sm/lib/asn1.mjs +146 -0
- package/dist/es/crypto/sm/lib/ec.d.ts +126 -0
- package/dist/es/crypto/sm/lib/ec.mjs +312 -0
- package/dist/es/crypto/sm/lib/jsbn.d.ts +198 -0
- package/dist/es/crypto/sm/lib/jsbn.mjs +1605 -0
- package/dist/es/crypto/sm/lib/sm3.d.ts +5 -0
- package/dist/es/crypto/sm/lib/sm3.mjs +155 -0
- package/dist/es/crypto/sm/lib/utils.d.ts +53 -0
- package/dist/es/crypto/sm/lib/utils.mjs +158 -0
- package/dist/es/crypto/sm/sm2/index.d.ts +71 -0
- package/dist/es/crypto/sm/sm2/index.mjs +101 -0
- package/dist/es/crypto/sm/sm2/sm2.d.ts +34 -0
- package/dist/es/crypto/sm/sm2/sm2.mjs +220 -0
- package/dist/es/crypto/sm/sm3/index.d.ts +7 -0
- package/dist/es/crypto/sm/sm3/index.mjs +13 -0
- package/dist/es/crypto/sm/sm3/sm3.d.ts +1 -0
- package/dist/es/crypto/sm/sm3/sm3.mjs +91 -0
- package/dist/es/crypto/sm/sm4/index.d.ts +16 -0
- package/dist/es/crypto/sm/sm4/index.mjs +24 -0
- package/dist/es/crypto/sm/sm4/sm4.d.ts +2 -0
- package/dist/es/crypto/sm/sm4/sm4.mjs +324 -0
- package/dist/es/crypto/tea/index.d.ts +14 -0
- package/dist/es/crypto/tea/index.mjs +22 -0
- package/dist/es/crypto/tea/tea.d.ts +69 -0
- package/dist/es/crypto/tea/tea.mjs +185 -0
- package/dist/es/date/index.d.ts +547 -0
- package/dist/es/date/index.mjs +1179 -0
- package/dist/es/desensitized/index.d.ts +38 -0
- package/dist/es/desensitized/index.mjs +69 -0
- package/dist/es/device/index.d.ts +67 -0
- package/dist/es/device/index.mjs +137 -0
- package/dist/es/dom/index.d.ts +57 -0
- package/dist/es/dom/index.mjs +119 -0
- package/dist/es/file/index.d.ts +93 -0
- package/dist/es/file/index.mjs +317 -0
- package/dist/es/function/index.d.ts +23 -0
- package/dist/es/function/index.mjs +65 -0
- package/dist/es/id/index.mjs +1 -1
- package/dist/es/index.d.ts +25 -42
- package/dist/es/index.mjs +54 -40
- package/dist/es/keycode/index.d.ts +12 -0
- package/dist/es/keycode/index.mjs +30 -0
- package/dist/es/math/index.d.ts +66 -0
- package/dist/es/math/index.mjs +268 -0
- package/dist/es/number/index.d.ts +14 -0
- package/dist/es/number/index.mjs +28 -0
- package/dist/es/object/index.d.ts +83 -0
- package/dist/es/object/index.mjs +259 -0
- package/dist/es/pagination/index.d.ts +34 -0
- package/dist/es/pagination/index.mjs +125 -0
- package/dist/es/random/index.d.ts +15 -0
- package/dist/es/random/index.mjs +21 -0
- package/dist/es/regexp/index.d.ts +63 -0
- package/dist/es/regexp/index.mjs +89 -0
- package/dist/es/storage/index.d.ts +7 -0
- package/dist/es/storage/index.mjs +9 -0
- package/dist/es/storage/localStorage.d.ts +21 -0
- package/dist/es/storage/localStorage.mjs +32 -0
- package/dist/es/storage/sessionStorage.d.ts +21 -0
- package/dist/es/storage/sessionStorage.mjs +32 -0
- package/dist/es/string/index.d.ts +121 -0
- package/dist/es/string/index.mjs +339 -0
- package/dist/es/url/index.d.ts +118 -0
- package/dist/es/url/index.mjs +240 -0
- package/dist/es/validate/index.d.ts +228 -0
- package/dist/es/validate/index.mjs +431 -0
- package/dist/es/weapp/index.d.ts +57 -0
- package/dist/es/weapp/index.mjs +131 -0
- package/dist/index.d.ts +2850 -53
- package/dist/lib/index.full.cjs.js +14230 -67
- package/dist/lib/index.full.cjs.min.js +64 -2
- package/dist/lib/index.full.cjs.min.js.map +1 -1
- package/dist/lib/index.full.esm.js +13881 -63
- package/dist/lib/index.full.esm.min.js +59 -2
- package/dist/lib/index.full.esm.min.js.map +1 -1
- package/dist/lib/index.full.umd.js +14230 -67
- package/dist/lib/index.full.umd.min.js +64 -2
- package/dist/lib/index.full.umd.min.js.map +1 -1
- package/dist/resolver/auto-imports.cjs +337 -11
- package/dist/resolver/auto-imports.mjs +337 -11
- package/dist/resolver/index.cjs +1 -1
- package/dist/resolver/index.mjs +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 两个数字相加
|
|
3
|
+
* @param {String|Number} arg1 第一个数字
|
|
4
|
+
* @param {String|Number} arg2 第二个数字
|
|
5
|
+
* @returns {Number} 返回计算后的数字
|
|
6
|
+
*/
|
|
7
|
+
export function add(arg1: string | number, arg2: string | number): number;
|
|
8
|
+
/**
|
|
9
|
+
* 两个数字相减
|
|
10
|
+
* @param {String|Number} arg1 第一个数字
|
|
11
|
+
* @param {String|Number} arg2 第二个数字
|
|
12
|
+
* @returns {Number} 返回计算后的数字
|
|
13
|
+
*/
|
|
14
|
+
export function subtract(arg1: string | number, arg2: string | number): number;
|
|
15
|
+
/**
|
|
16
|
+
* 两个数字相乘
|
|
17
|
+
* @param {String|Number} arg1 第一个数字
|
|
18
|
+
* @param {String|Number} arg2 第二个数字
|
|
19
|
+
* @returns 返回计算后的数字
|
|
20
|
+
*/
|
|
21
|
+
export function multiply(arg1: string | number, arg2: string | number): number;
|
|
22
|
+
/**
|
|
23
|
+
* 两个数字相除
|
|
24
|
+
* @param {String|Number} arg1 第一个数字
|
|
25
|
+
* @param {String|Number} arg2 第二个数字
|
|
26
|
+
* @returns {Number} 返回计算后的数字
|
|
27
|
+
*/
|
|
28
|
+
export function divide(arg1: string | number, arg2: string | number): number;
|
|
29
|
+
/**
|
|
30
|
+
* 两个数字取模
|
|
31
|
+
* @param {String|Number} arg1 第一个数字
|
|
32
|
+
* @param {String|Number} arg2 第二个数字
|
|
33
|
+
* @returns {Number} 返回计算后的数字
|
|
34
|
+
*/
|
|
35
|
+
export function modulo(arg1: string | number, arg2: string | number): number;
|
|
36
|
+
/**
|
|
37
|
+
* 最大公约数
|
|
38
|
+
* @param {String|Number} arg1 第一个数字
|
|
39
|
+
* @param {String|Number} arg2 第二个数字
|
|
40
|
+
* @returns {Number} 返回计算后的数字
|
|
41
|
+
*/
|
|
42
|
+
export function gcd(arg1: string | number, arg2: string | number): number;
|
|
43
|
+
/**
|
|
44
|
+
* 最小公倍数
|
|
45
|
+
* @param {String|Number} arg1 第一个数字
|
|
46
|
+
* @param {String|Number} arg2 第二个数字
|
|
47
|
+
* @returns {Number} 返回计算后的数字
|
|
48
|
+
*/
|
|
49
|
+
export function scm(arg1: string | number, arg2: string | number): number;
|
|
50
|
+
/**
|
|
51
|
+
* 强制保留小数位数
|
|
52
|
+
* @description 默认保留两位小数,解决原生的toFixed()会五舍六入的问题
|
|
53
|
+
* @param {String|Number} num 数字
|
|
54
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
55
|
+
* @param {Number} mode 保留小数模式
|
|
56
|
+
* @returns {String} 返回保留后的数字字符串
|
|
57
|
+
*/
|
|
58
|
+
export function toFixed(num: string | number, decimals?: number, mode?: number): string;
|
|
59
|
+
/**
|
|
60
|
+
* 尽可能保留小数位数
|
|
61
|
+
* @param {String|Number} num 数字
|
|
62
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
63
|
+
* @param {Number} mode 保留小数模式
|
|
64
|
+
* @returns {Number} 返回保留后的数字
|
|
65
|
+
*/
|
|
66
|
+
export function toDecimal(num: string | number, decimals?: number, mode?: number): number;
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { isNaN } from '../validate/index.mjs';
|
|
2
|
+
import { MATH } from '../constants/math.mjs';
|
|
3
|
+
|
|
4
|
+
/* 数字计算 */
|
|
5
|
+
/**
|
|
6
|
+
* 两个数字相加
|
|
7
|
+
* @param {String|Number} arg1 第一个数字
|
|
8
|
+
* @param {String|Number} arg2 第二个数字
|
|
9
|
+
* @returns {Number} 返回计算后的数字
|
|
10
|
+
*/
|
|
11
|
+
function add(arg1, arg2) {
|
|
12
|
+
let r1, r2, m;
|
|
13
|
+
try {
|
|
14
|
+
r1 = arg1.toString().split(".")[1].length;
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
r1 = 0;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
r2 = arg2.toString().split(".")[1].length;
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
r2 = 0;
|
|
24
|
+
}
|
|
25
|
+
m = Math.pow(10, Math.max(r1, r2));
|
|
26
|
+
return (arg1 * m + arg2 * m) / m;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 两个数字相减
|
|
30
|
+
* @param {String|Number} arg1 第一个数字
|
|
31
|
+
* @param {String|Number} arg2 第二个数字
|
|
32
|
+
* @returns {Number} 返回计算后的数字
|
|
33
|
+
*/
|
|
34
|
+
function subtract(arg1, arg2) {
|
|
35
|
+
let r1, r2, m, n;
|
|
36
|
+
try {
|
|
37
|
+
r1 = arg1.toString().split(".")[1].length;
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
r1 = 0;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
r2 = arg2.toString().split(".")[1].length;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
r2 = 0;
|
|
47
|
+
}
|
|
48
|
+
m = Math.pow(10, Math.max(r1, r2));
|
|
49
|
+
n = r1 >= r2 ? r1 : r2;
|
|
50
|
+
return ((arg1 * m - arg2 * m) / m).toFixed(n);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 两个数字相乘
|
|
54
|
+
* @param {String|Number} arg1 第一个数字
|
|
55
|
+
* @param {String|Number} arg2 第二个数字
|
|
56
|
+
* @returns 返回计算后的数字
|
|
57
|
+
*/
|
|
58
|
+
function multiply(arg1, arg2) {
|
|
59
|
+
let m = 0, s1 = arg1.toString(), s2 = arg2.toString();
|
|
60
|
+
try {
|
|
61
|
+
m += s1.split(".")[1].length;
|
|
62
|
+
}
|
|
63
|
+
catch (e) { }
|
|
64
|
+
try {
|
|
65
|
+
m += s2.split(".")[1].length;
|
|
66
|
+
}
|
|
67
|
+
catch (e) { }
|
|
68
|
+
return (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) / Math.pow(10, m);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 两个数字相除
|
|
72
|
+
* @param {String|Number} arg1 第一个数字
|
|
73
|
+
* @param {String|Number} arg2 第二个数字
|
|
74
|
+
* @returns {Number} 返回计算后的数字
|
|
75
|
+
*/
|
|
76
|
+
function divide(arg1, arg2) {
|
|
77
|
+
let t1 = 0, t2 = 0, r1, r2;
|
|
78
|
+
try {
|
|
79
|
+
t1 = arg1.toString().split(".")[1].length;
|
|
80
|
+
}
|
|
81
|
+
catch (e) { }
|
|
82
|
+
try {
|
|
83
|
+
t2 = arg2.toString().split(".")[1].length;
|
|
84
|
+
}
|
|
85
|
+
catch (e) { }
|
|
86
|
+
r1 = Number(arg1.toString().replace(".", ""));
|
|
87
|
+
r2 = Number(arg2.toString().replace(".", ""));
|
|
88
|
+
return (r1 / r2) * Math.pow(10, t2 - t1);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 两个数字取模
|
|
92
|
+
* @param {String|Number} arg1 第一个数字
|
|
93
|
+
* @param {String|Number} arg2 第二个数字
|
|
94
|
+
* @returns {Number} 返回计算后的数字
|
|
95
|
+
*/
|
|
96
|
+
function modulo(arg1, arg2) {
|
|
97
|
+
let t1 = 0, t2 = 0, d = 0;
|
|
98
|
+
try {
|
|
99
|
+
t1 = arg1.toString().split(".")[1].length;
|
|
100
|
+
}
|
|
101
|
+
catch (e) { }
|
|
102
|
+
try {
|
|
103
|
+
t2 = arg2.toString().split(".")[1].length;
|
|
104
|
+
}
|
|
105
|
+
catch (e) { }
|
|
106
|
+
d = Math.pow(10, Math.max(t1, t2));
|
|
107
|
+
return (Math.round(Number(arg1) * d) % Math.round(Number(arg2) * d)) / d;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 最大公约数
|
|
111
|
+
* @param {String|Number} arg1 第一个数字
|
|
112
|
+
* @param {String|Number} arg2 第二个数字
|
|
113
|
+
* @returns {Number} 返回计算后的数字
|
|
114
|
+
*/
|
|
115
|
+
function gcd(arg1, arg2) {
|
|
116
|
+
return !arg2 ? arg1 : gcd(arg2, arg1 % arg2);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 最小公倍数
|
|
120
|
+
* @param {String|Number} arg1 第一个数字
|
|
121
|
+
* @param {String|Number} arg2 第二个数字
|
|
122
|
+
* @returns {Number} 返回计算后的数字
|
|
123
|
+
*/
|
|
124
|
+
function scm(arg1, arg2) {
|
|
125
|
+
return (arg1 * arg2) / gcd(arg1, arg2);
|
|
126
|
+
}
|
|
127
|
+
/* 数字精度 */
|
|
128
|
+
/**
|
|
129
|
+
* 强制保留小数位数
|
|
130
|
+
* @description 默认保留两位小数,解决原生的toFixed()会五舍六入的问题
|
|
131
|
+
* @param {String|Number} num 数字
|
|
132
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
133
|
+
* @param {Number} mode 保留小数模式
|
|
134
|
+
* @returns {String} 返回保留后的数字字符串
|
|
135
|
+
*/
|
|
136
|
+
function toFixed(num, decimals = 2, mode = MATH.ROUND) {
|
|
137
|
+
// 四舍五入
|
|
138
|
+
if (mode === MATH.ROUND) {
|
|
139
|
+
return _toFixedRound(num, decimals);
|
|
140
|
+
}
|
|
141
|
+
// 向下舍出
|
|
142
|
+
if (mode === MATH.ROUND_FLOOR) {
|
|
143
|
+
return _toFixedFloor(num, decimals);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 尽可能保留小数位数
|
|
148
|
+
* @param {String|Number} num 数字
|
|
149
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
150
|
+
* @param {Number} mode 保留小数模式
|
|
151
|
+
* @returns {Number} 返回保留后的数字
|
|
152
|
+
*/
|
|
153
|
+
function toDecimal(num, decimals = 2, mode = MATH.ROUND) {
|
|
154
|
+
// 四舍五入
|
|
155
|
+
if (mode === MATH.ROUND) {
|
|
156
|
+
return _toDecimalRound(num, decimals);
|
|
157
|
+
}
|
|
158
|
+
// 向下舍出
|
|
159
|
+
if (mode === MATH.ROUND_FLOOR) {
|
|
160
|
+
return _toDecimalFloor(num, decimals);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/* 内部函数 */
|
|
164
|
+
/**
|
|
165
|
+
* 四舍五入,强制保留小数位数
|
|
166
|
+
* @description 默认保留两位小数,此方法解决原生的toFixed()会五舍六入的问题
|
|
167
|
+
* @param {String|Number} num 数字
|
|
168
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
169
|
+
* @returns {String} 返回字符串的数字
|
|
170
|
+
*/
|
|
171
|
+
function _toFixedRound(num, decimals = 2) {
|
|
172
|
+
if (isNaN(num)) {
|
|
173
|
+
return "--";
|
|
174
|
+
}
|
|
175
|
+
let s = String(num);
|
|
176
|
+
if (!decimals)
|
|
177
|
+
decimals = 0;
|
|
178
|
+
if (s.indexOf(".") === -1)
|
|
179
|
+
s += ".";
|
|
180
|
+
s += new Array(decimals + 1).join("0");
|
|
181
|
+
if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (decimals + 1) + "})?)\\d*$").test(s)) {
|
|
182
|
+
let s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
|
|
183
|
+
if (a === decimals + 2) {
|
|
184
|
+
a = s.match(/\d/g);
|
|
185
|
+
if (parseInt(a[a.length - 1]) > 4) {
|
|
186
|
+
for (let i = a.length - 2; i >= 0; i--) {
|
|
187
|
+
a[i] = parseInt(a[i]) + 1;
|
|
188
|
+
if (a[i] === 10) {
|
|
189
|
+
a[i] = 0;
|
|
190
|
+
b = i !== 1;
|
|
191
|
+
}
|
|
192
|
+
else
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
s = a.join("").replace(new RegExp("(\\d+)(\\d{" + decimals + "})\\d$"), "$1.$2");
|
|
197
|
+
}
|
|
198
|
+
if (b)
|
|
199
|
+
s = s.substr(1);
|
|
200
|
+
return (pm + s).replace(/\.$/, "");
|
|
201
|
+
}
|
|
202
|
+
return String(num);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 向下舍出,强制保留小数位数
|
|
206
|
+
* @description 默认保留两位小数,此方法相当于强制截取小数位数
|
|
207
|
+
* @param {String|Number} num 数字
|
|
208
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
209
|
+
* @returns {Number} 返回字符串的数字
|
|
210
|
+
*/
|
|
211
|
+
function _toFixedFloor(num, decimals = 2) {
|
|
212
|
+
if (isNaN(num)) {
|
|
213
|
+
return "--";
|
|
214
|
+
}
|
|
215
|
+
// 默认为保留的小数点后两位
|
|
216
|
+
let dec = decimals;
|
|
217
|
+
let tempNum = Number(num);
|
|
218
|
+
let pointIndex = String(tempNum).indexOf(".") + 1; // 获取小数点的位置 + 1
|
|
219
|
+
let pointCount = pointIndex ? String(tempNum).length - pointIndex : 0; // 获取小数点后的个数(需要保证有小数位)
|
|
220
|
+
// 源数据为整数或者小数点后面小于decimals位的作补零处理
|
|
221
|
+
if (pointIndex === 0 || pointCount <= dec) {
|
|
222
|
+
let tempNumA = tempNum;
|
|
223
|
+
if (pointIndex === 0) {
|
|
224
|
+
tempNumA = `${tempNumA}.`;
|
|
225
|
+
for (let index = 0; index < dec - pointCount; index++) {
|
|
226
|
+
tempNumA = `${tempNumA}0`;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
for (let index = 0; index < dec - pointCount; index++) {
|
|
231
|
+
tempNumA = `${tempNumA}0`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return tempNumA;
|
|
235
|
+
}
|
|
236
|
+
let realVal = "";
|
|
237
|
+
// 截取当前数据到小数点后decimals位
|
|
238
|
+
realVal = `${String(tempNum).split(".")[0]}.${String(tempNum).split(".")[1].substring(0, dec)}`;
|
|
239
|
+
return String(realVal);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 四舍五入,尽可能保留小数
|
|
243
|
+
* @param {String|Number} num 数字
|
|
244
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
245
|
+
* @returns {Number} 返回保留后的数字
|
|
246
|
+
*/
|
|
247
|
+
function _toDecimalRound(num, decimals = 2) {
|
|
248
|
+
if (isNaN(num)) {
|
|
249
|
+
return "--";
|
|
250
|
+
}
|
|
251
|
+
let n = Math.pow(10, decimals);
|
|
252
|
+
return Math.round(num * n) / n;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 向下舍入,尽可能保留小数
|
|
256
|
+
* @param {String|Number} num 数字
|
|
257
|
+
* @param {Number} decimals 保留小数的位数,默认2位
|
|
258
|
+
* @returns {Number} 返回保留后的数字
|
|
259
|
+
*/
|
|
260
|
+
function _toDecimalFloor(num, decimals = 2) {
|
|
261
|
+
if (isNaN(num)) {
|
|
262
|
+
return "--";
|
|
263
|
+
}
|
|
264
|
+
let n = Math.pow(10, decimals);
|
|
265
|
+
return Math.floor(num * n) / n;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export { add, divide, gcd, modulo, multiply, scm, subtract, toDecimal, toFixed };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 转为数字类型
|
|
3
|
+
* @description 解决部分浏览器在转换 '08','09'等是0开头时被默认转8进制问题
|
|
4
|
+
* @param {String,number} value 转换的值
|
|
5
|
+
* @param {Number} radix 进制数,默认10进制
|
|
6
|
+
* @returns {Number} 返回转换后的数字
|
|
7
|
+
*/
|
|
8
|
+
export function parseInt(value: any, radix?: number): number;
|
|
9
|
+
/**
|
|
10
|
+
* 转为小数类型
|
|
11
|
+
* @param {String,number} value 转换的值
|
|
12
|
+
* @returns {Number} 返回转换后的数字
|
|
13
|
+
*/
|
|
14
|
+
export function parseFloat(value: any): number;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isNull } from '../validate/index.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 转为数字类型
|
|
5
|
+
* @description 解决部分浏览器在转换 '08','09'等是0开头时被默认转8进制问题
|
|
6
|
+
* @param {String,number} value 转换的值
|
|
7
|
+
* @param {Number} radix 进制数,默认10进制
|
|
8
|
+
* @returns {Number} 返回转换后的数字
|
|
9
|
+
*/
|
|
10
|
+
function parseInt(value, radix = 10) {
|
|
11
|
+
if (isNull(value)) {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
return Number.parseInt(value, radix);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 转为小数类型
|
|
18
|
+
* @param {String,number} value 转换的值
|
|
19
|
+
* @returns {Number} 返回转换后的数字
|
|
20
|
+
*/
|
|
21
|
+
function parseFloat(value) {
|
|
22
|
+
if (isNull(value)) {
|
|
23
|
+
return 0.0;
|
|
24
|
+
}
|
|
25
|
+
return Number.parseFloat(value);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { parseFloat, parseInt };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* map转object
|
|
3
|
+
* @param {Map} map 参数
|
|
4
|
+
* @returns {Object} 返回Object
|
|
5
|
+
*/
|
|
6
|
+
export function mapToObject(map: Map<any, any>): Object;
|
|
7
|
+
/**
|
|
8
|
+
* map转json字符串
|
|
9
|
+
* @param {Map} map 参数
|
|
10
|
+
* @returns {String} 返回Json字符串
|
|
11
|
+
*/
|
|
12
|
+
export function mapToJson(map: Map<any, any>): string;
|
|
13
|
+
/**
|
|
14
|
+
* object转map
|
|
15
|
+
* @param {Object} obj 参数
|
|
16
|
+
* @returns {Map} 返回Map
|
|
17
|
+
*/
|
|
18
|
+
export function objectToMap(obj: Object): Map<any, any>;
|
|
19
|
+
/**
|
|
20
|
+
* json字符串转map
|
|
21
|
+
* @param {String} json json字符串
|
|
22
|
+
* @returns {Map} 返回Map
|
|
23
|
+
*/
|
|
24
|
+
export function jsonToMap(json: string): Map<any, any>;
|
|
25
|
+
/**
|
|
26
|
+
* json对象转json字符串
|
|
27
|
+
* @param {Object} json json对象
|
|
28
|
+
* @returns {String} 返回Json字符串
|
|
29
|
+
*/
|
|
30
|
+
export function stringifyJson(json: Object): string;
|
|
31
|
+
/**
|
|
32
|
+
* json字符串转json对象
|
|
33
|
+
* @param {String} json json字符串
|
|
34
|
+
* @returns {Object} 返回Json对象
|
|
35
|
+
*/
|
|
36
|
+
export function parseJson(json: string): Object;
|
|
37
|
+
/**
|
|
38
|
+
* 浅拷贝数据
|
|
39
|
+
* @param {*} source 拷贝的数据
|
|
40
|
+
* @returns {*} 返回浅拷贝的数据
|
|
41
|
+
*/
|
|
42
|
+
export function clone(source: any): any;
|
|
43
|
+
/**
|
|
44
|
+
* 深拷贝数据
|
|
45
|
+
* @param {*} source 拷贝的数据
|
|
46
|
+
* @returns {*} 返回深拷贝的数据
|
|
47
|
+
*/
|
|
48
|
+
export function deepClone(source: any): any;
|
|
49
|
+
/**
|
|
50
|
+
* 比较两个对象是否相等
|
|
51
|
+
* @description 方法只能对比简单的对象,不能包含function,另外对象的属性顺序不一致也是相等的
|
|
52
|
+
* @param {Object} obj1 对象1
|
|
53
|
+
* @param {Object} obj2 对象2
|
|
54
|
+
* @returns {Boolean} 返回true和false
|
|
55
|
+
*/
|
|
56
|
+
export function objectEquals(obj1: Object, obj2: Object): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* 合并对象
|
|
59
|
+
* @param {Object} target 目标对象
|
|
60
|
+
* @param {Object[]} source 原对象列表
|
|
61
|
+
* @returns {Object} 返回合并后的对象
|
|
62
|
+
*/
|
|
63
|
+
export function merge(target: Object, ...source: Object[]): Object;
|
|
64
|
+
/**
|
|
65
|
+
* 根据字符串属性路径获取目标对象的值
|
|
66
|
+
* @example
|
|
67
|
+
* let res = {code:200, data:{rows:[], pages:{current:1,pageSize:20}}}
|
|
68
|
+
* this._getValueByPath(res, 'data.pages.pageSize'); // 这里会输出20
|
|
69
|
+
* @param {Object} target 目标对象
|
|
70
|
+
* @param {String} path 字符串属性路径
|
|
71
|
+
* @returns {Object} 返回目标对象
|
|
72
|
+
*/
|
|
73
|
+
export function getValueByPath(target: Object, path?: string): Object;
|
|
74
|
+
/**
|
|
75
|
+
* 根据字符串属性路径设置目标对象的值
|
|
76
|
+
* @example
|
|
77
|
+
* let res = {code:200, data:{rows:[], pages:{current:1,pageSize:20}}}
|
|
78
|
+
* this._setValueByPath(res, 'data.pages.pageSize', 30); // 打印res对象会发现pageSize的值改为了30
|
|
79
|
+
* @param {Object} target 目标对象
|
|
80
|
+
* @param {String} path 字符串属性路径
|
|
81
|
+
* @param {*} value 值
|
|
82
|
+
*/
|
|
83
|
+
export function setValueByPath(target: Object, path: string, value: any): Object;
|