@fnmain/number 1.1.0 → 1.3.0
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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -1
- package/dist/index.js.map +1 -0
- package/dist/test.d.ts +1 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +14 -0
- package/dist/test.js.map +1 -0
- package/package.json +7 -2
- package/src/index.ts +51 -0
- package/src/test.ts +15 -1
- package/tsconfig.json +0 -14
package/dist/index.d.ts
CHANGED
@@ -9,4 +9,6 @@ export declare function toYi(value: number, { fixed, trimEndZeros, space }?: Opt
|
|
9
9
|
export declare function toWanYi(value: number, { fixed, trimEndZeros, space }?: Options): string;
|
10
10
|
export declare function toAuto(value: number, { fixed, trimEndZeros, space }?: Options): string;
|
11
11
|
export declare function toPercent(value: number, { fixed, trimEndZeros, space }?: Options): string;
|
12
|
+
export declare function parseNumber(input: string): number | null;
|
12
13
|
export {};
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,EAAE,KAAS,EAAE,YAAoB,EAAE,KAAU,EAAE,GAAE,OAAY,GAC5D,MAAM,CAIR;AAED,wBAAgB,IAAI,CAClB,KAAK,EAAE,MAAM,EACb,EAAE,KAAS,EAAE,YAAoB,EAAE,KAAU,EAAE,GAAE,OAAY,GAC5D,MAAM,CAIR;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,EAAE,KAAS,EAAE,YAAoB,EAAE,KAAU,EAAE,GAAE,OAAY,GAC5D,MAAM,CAIR;AAED,wBAAgB,MAAM,CACpB,KAAK,EAAE,MAAM,EACb,EAAE,KAAS,EAAE,YAAoB,EAAE,KAAU,EAAE,GAAE,OAAY,GAC5D,MAAM,CAcR;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,EAAE,KAAS,EAAE,YAAoB,EAAE,KAAU,EAAE,GAAE,OAAY,UAK9D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiDxD"}
|
package/dist/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.toPercent = exports.toAuto = exports.toWanYi = exports.toYi = exports.toWan = exports.trimTrailingZeros = void 0;
|
3
|
+
exports.parseNumber = exports.toPercent = exports.toAuto = exports.toWanYi = exports.toYi = exports.toWan = exports.trimTrailingZeros = void 0;
|
4
4
|
function trimTrailingZeros(numberString) {
|
5
5
|
// Check if the string contains a decimal point
|
6
6
|
if (numberString.includes(".")) {
|
@@ -51,3 +51,50 @@ function toPercent(value, { fixed = 2, trimEndZeros = false, space = "" } = {})
|
|
51
51
|
return ret + space + "%";
|
52
52
|
}
|
53
53
|
exports.toPercent = toPercent;
|
54
|
+
function parseNumber(input) {
|
55
|
+
// Remove whitespace
|
56
|
+
input = input.trim();
|
57
|
+
// Define a helper function to handle suffixes
|
58
|
+
const handleSuffix = (number, suffix) => {
|
59
|
+
switch (suffix.toLowerCase()) {
|
60
|
+
case "k":
|
61
|
+
return number * 1e3;
|
62
|
+
case "m":
|
63
|
+
return number * 1e6;
|
64
|
+
case "g":
|
65
|
+
case "b":
|
66
|
+
return number * 1e9;
|
67
|
+
case "t":
|
68
|
+
return number * 1e12;
|
69
|
+
case "万":
|
70
|
+
case "萬":
|
71
|
+
case "w":
|
72
|
+
return number * 1e4;
|
73
|
+
case "亿":
|
74
|
+
return number * 1e8;
|
75
|
+
default:
|
76
|
+
return number;
|
77
|
+
}
|
78
|
+
};
|
79
|
+
// Check for percentage
|
80
|
+
if (input.endsWith("%")) {
|
81
|
+
const number = parseFloat(input.slice(0, -1));
|
82
|
+
return isNaN(number) ? null : number / 100;
|
83
|
+
}
|
84
|
+
// Check for per mille
|
85
|
+
if (input.endsWith("‰")) {
|
86
|
+
const number = parseFloat(input.slice(0, -1));
|
87
|
+
return isNaN(number) ? null : number / 1000;
|
88
|
+
}
|
89
|
+
// Check for suffixes (k, m, g, t)
|
90
|
+
const suffixMatch = input.match(/([kmgKMGtT万萬w亿])$/);
|
91
|
+
if (suffixMatch) {
|
92
|
+
const number = parseFloat(input.slice(0, -1));
|
93
|
+
return isNaN(number) ? null : handleSuffix(number, suffixMatch[0]);
|
94
|
+
}
|
95
|
+
// Check for scientific notation and other formats
|
96
|
+
const number = parseFloat(input);
|
97
|
+
return isNaN(number) ? null : number;
|
98
|
+
}
|
99
|
+
exports.parseNumber = parseNumber;
|
100
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/test.d.ts
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":""}
|
package/dist/test.js
CHANGED
@@ -12,3 +12,17 @@ console.log((0, index_1.toAuto)(1.2, { fixed: 4, trimEndZeros: true }));
|
|
12
12
|
console.log((0, index_1.toPercent)(0.1234, { fixed: 1, space: " " }));
|
13
13
|
console.log((0, index_1.toPercent)(1.23456, { trimEndZeros: true }));
|
14
14
|
console.log((0, index_1.toPercent)(1.9, { fixed: 4, trimEndZeros: true }));
|
15
|
+
// Example usage
|
16
|
+
console.log((0, index_1.parseNumber)("50%")); // 0.5
|
17
|
+
console.log((0, index_1.parseNumber)("1e3")); // 1000
|
18
|
+
console.log((0, index_1.parseNumber)(" 123 ")); // 123
|
19
|
+
console.log((0, index_1.parseNumber)("100‰")); // 0.1
|
20
|
+
console.log((0, index_1.parseNumber)("5k")); // 5000
|
21
|
+
console.log((0, index_1.parseNumber)("3M")); // 3000000
|
22
|
+
console.log((0, index_1.parseNumber)("2G")); // 2000000000
|
23
|
+
console.log((0, index_1.parseNumber)("1t")); // 1000000000000
|
24
|
+
console.log((0, index_1.parseNumber)("1万")); // 10000
|
25
|
+
console.log((0, index_1.parseNumber)("1w")); // 10000
|
26
|
+
console.log((0, index_1.parseNumber)("1亿")); // 100000000
|
27
|
+
console.log((0, index_1.parseNumber)("abc")); // null
|
28
|
+
//# sourceMappingURL=test.js.map
|
package/dist/test.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,mCAAyD;AAEzD,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,SAAS,CAAC,CAAC,CAAC;AAE/B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,IAAA,cAAM,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE3D,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAS,EAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAS,EAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAS,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE9D,gBAAgB;AAChB,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AACvC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;AACxC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;AAC3C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;AACxC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;AACvC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;AAC1C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa;AAC7C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB;AAChD,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AACxC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AACxC,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;AAC5C,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO"}
|
package/package.json
CHANGED
@@ -1,15 +1,20 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fnmain/number",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.3.0",
|
4
4
|
"description": "number utils",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
7
7
|
"scripts": {
|
8
8
|
"build": "tsc",
|
9
|
-
"test": "tsc && node dist/test.js"
|
9
|
+
"test": "tsc && node dist/test.js",
|
10
|
+
"pub": "npm run build && npm publish --access public --registry=https://registry.npmjs.org/ && node sync-npmmirror.js "
|
10
11
|
},
|
11
12
|
"author": "DC",
|
12
13
|
"license": "MIT",
|
14
|
+
"files": [
|
15
|
+
"dist",
|
16
|
+
"src"
|
17
|
+
],
|
13
18
|
"devDependencies": {
|
14
19
|
"@types/node": "^20.8.3",
|
15
20
|
"typescript": "^5.2.2"
|
package/src/index.ts
CHANGED
@@ -68,3 +68,54 @@ export function toPercent(
|
|
68
68
|
ret = trimEndZeros ? trimTrailingZeros(ret) : ret;
|
69
69
|
return ret + space + "%";
|
70
70
|
}
|
71
|
+
|
72
|
+
export function parseNumber(input: string): number | null {
|
73
|
+
// Remove whitespace
|
74
|
+
input = input.trim();
|
75
|
+
|
76
|
+
// Define a helper function to handle suffixes
|
77
|
+
const handleSuffix = (number: number, suffix: string): number => {
|
78
|
+
switch (suffix.toLowerCase()) {
|
79
|
+
case "k":
|
80
|
+
return number * 1e3;
|
81
|
+
case "m":
|
82
|
+
return number * 1e6;
|
83
|
+
case "g":
|
84
|
+
case "b":
|
85
|
+
return number * 1e9;
|
86
|
+
case "t":
|
87
|
+
return number * 1e12;
|
88
|
+
case "万":
|
89
|
+
case "萬":
|
90
|
+
case "w":
|
91
|
+
return number * 1e4;
|
92
|
+
case "亿":
|
93
|
+
return number * 1e8;
|
94
|
+
default:
|
95
|
+
return number;
|
96
|
+
}
|
97
|
+
};
|
98
|
+
|
99
|
+
// Check for percentage
|
100
|
+
if (input.endsWith("%")) {
|
101
|
+
const number = parseFloat(input.slice(0, -1));
|
102
|
+
return isNaN(number) ? null : number / 100;
|
103
|
+
}
|
104
|
+
|
105
|
+
// Check for per mille
|
106
|
+
if (input.endsWith("‰")) {
|
107
|
+
const number = parseFloat(input.slice(0, -1));
|
108
|
+
return isNaN(number) ? null : number / 1000;
|
109
|
+
}
|
110
|
+
|
111
|
+
// Check for suffixes (k, m, g, t)
|
112
|
+
const suffixMatch = input.match(/([kmgKMGtT万萬w亿])$/);
|
113
|
+
if (suffixMatch) {
|
114
|
+
const number = parseFloat(input.slice(0, -1));
|
115
|
+
return isNaN(number) ? null : handleSuffix(number, suffixMatch[0]);
|
116
|
+
}
|
117
|
+
|
118
|
+
// Check for scientific notation and other formats
|
119
|
+
const number = parseFloat(input);
|
120
|
+
return isNaN(number) ? null : number;
|
121
|
+
}
|
package/src/test.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { toAuto, toPercent } from "./index";
|
1
|
+
import { parseNumber, toAuto, toPercent } from "./index";
|
2
2
|
|
3
3
|
console.log(toAuto(1234));
|
4
4
|
console.log(toAuto(12345));
|
@@ -13,3 +13,17 @@ console.log(toAuto(1.2, { fixed: 4, trimEndZeros: true }));
|
|
13
13
|
console.log(toPercent(0.1234, { fixed: 1, space: " " }));
|
14
14
|
console.log(toPercent(1.23456, { trimEndZeros: true }));
|
15
15
|
console.log(toPercent(1.9, { fixed: 4, trimEndZeros: true }));
|
16
|
+
|
17
|
+
// Example usage
|
18
|
+
console.log(parseNumber("50%")); // 0.5
|
19
|
+
console.log(parseNumber("1e3")); // 1000
|
20
|
+
console.log(parseNumber(" 123 ")); // 123
|
21
|
+
console.log(parseNumber("100‰")); // 0.1
|
22
|
+
console.log(parseNumber("5k")); // 5000
|
23
|
+
console.log(parseNumber("3M")); // 3000000
|
24
|
+
console.log(parseNumber("2G")); // 2000000000
|
25
|
+
console.log(parseNumber("1t")); // 1000000000000
|
26
|
+
console.log(parseNumber("1万")); // 10000
|
27
|
+
console.log(parseNumber("1w")); // 10000
|
28
|
+
console.log(parseNumber("1亿")); // 100000000
|
29
|
+
console.log(parseNumber("abc")); // null
|
package/tsconfig.json
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"compilerOptions": {
|
3
|
-
"target": "es2016",
|
4
|
-
"module": "commonjs",
|
5
|
-
"outDir": "./dist",
|
6
|
-
"strict": true,
|
7
|
-
"esModuleInterop": true,
|
8
|
-
"skipLibCheck": true,
|
9
|
-
"forceConsistentCasingInFileNames": true,
|
10
|
-
"declaration": true
|
11
|
-
},
|
12
|
-
"include": ["src/**/*.ts"],
|
13
|
-
"exclude": ["node_modules"]
|
14
|
-
}
|