Skip to content

Commit 93c1f9b

Browse files
author
Simon he
committed
chore: add calNum
1 parent 095b7da commit 93c1f9b

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/calNum.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
export const calNum = {
2+
add(...args: (number | string)[]): number {
3+
return args.reduce((total, num) => accAdd(+total, +num)) as number;
4+
},
5+
sub(...args: (number | string)[]): number {
6+
return args.reduce((total, num) => accAdd(+total, -num)) as number;
7+
},
8+
mul(...args: (number | string)[]): number {
9+
return args.reduce((total, num) => accMul(+total, +num)) as number;
10+
},
11+
div(...args: (number | string)[]): number {
12+
return args.reduce((total, num) => accDiv(+total, +num)) as number;
13+
},
14+
}
15+
16+
17+
function accAdd(arg1: number, arg2: number): number {
18+
let r1, r2, m;
19+
try {
20+
r1 = arg1.toString().split('.')[1].length;
21+
} catch (e) {
22+
r1 = 0;
23+
}
24+
try {
25+
r2 = arg2.toString().split('.')[1].length;
26+
} catch (e) {
27+
r2 = 0;
28+
}
29+
m = Math.pow(10, Math.max(r1, r2));
30+
return (arg1 * m + arg2 * m) / m;
31+
};
32+
33+
function accMul(arg1: number, arg2: number): number {
34+
let m = 0;
35+
let s1 = arg1.toString();
36+
let s2 = arg2.toString();
37+
try {
38+
m += s1.split('.')[1].length;
39+
} catch (e) { }
40+
try {
41+
m += s2.split('.')[1].length;
42+
} catch (e) { }
43+
return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
44+
};
45+
46+
function accDiv(arg1: number, arg2: number): number {
47+
let t1 = 0;
48+
let t2 = 0;
49+
let r1; let r2;
50+
try {
51+
t1 = arg1.toString().split('.')[1].length;
52+
} catch (e) { }
53+
try {
54+
t2 = arg2.toString().split('.')[1].length;
55+
} catch (e) { }
56+
r1 = Number(arg1.toString().replace('.', ''));
57+
r2 = Number(arg2.toString().replace('.', ''));
58+
return (r1 / r2) * Math.pow(10, t2 - t1);
59+
};

0 commit comments

Comments
 (0)