@fnmain/number 1.1.0 → 1.2.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 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,CA0CxD"}
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,43 @@ 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
+ return number * 1e9;
66
+ case "t":
67
+ return number * 1e12;
68
+ default:
69
+ return number;
70
+ }
71
+ };
72
+ // Check for percentage
73
+ if (input.endsWith("%")) {
74
+ const number = parseFloat(input.slice(0, -1));
75
+ return isNaN(number) ? null : number / 100;
76
+ }
77
+ // Check for per mille
78
+ if (input.endsWith("‰")) {
79
+ const number = parseFloat(input.slice(0, -1));
80
+ return isNaN(number) ? null : number / 1000;
81
+ }
82
+ // Check for suffixes (k, m, g, t)
83
+ const suffixMatch = input.match(/([kmgKMGtT])$/);
84
+ if (suffixMatch) {
85
+ const number = parseFloat(input.slice(0, -1));
86
+ return isNaN(number) ? null : handleSuffix(number, suffixMatch[0]);
87
+ }
88
+ // Check for scientific notation and other formats
89
+ const number = parseFloat(input);
90
+ return isNaN(number) ? null : number;
91
+ }
92
+ exports.parseNumber = parseNumber;
93
+ //# 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
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -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,14 @@ 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)("abc")); // null
25
+ //# sourceMappingURL=test.js.map
@@ -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,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnmain/number",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "number utils",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,6 +10,10 @@
10
10
  },
11
11
  "author": "DC",
12
12
  "license": "MIT",
13
+ "files": [
14
+ "dist",
15
+ "src"
16
+ ],
13
17
  "devDependencies": {
14
18
  "@types/node": "^20.8.3",
15
19
  "typescript": "^5.2.2"
package/src/index.ts CHANGED
@@ -68,3 +68,47 @@ 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
+ return number * 1e9;
85
+ case "t":
86
+ return number * 1e12;
87
+ default:
88
+ return number;
89
+ }
90
+ };
91
+
92
+ // Check for percentage
93
+ if (input.endsWith("%")) {
94
+ const number = parseFloat(input.slice(0, -1));
95
+ return isNaN(number) ? null : number / 100;
96
+ }
97
+
98
+ // Check for per mille
99
+ if (input.endsWith("‰")) {
100
+ const number = parseFloat(input.slice(0, -1));
101
+ return isNaN(number) ? null : number / 1000;
102
+ }
103
+
104
+ // Check for suffixes (k, m, g, t)
105
+ const suffixMatch = input.match(/([kmgKMGtT])$/);
106
+ if (suffixMatch) {
107
+ const number = parseFloat(input.slice(0, -1));
108
+ return isNaN(number) ? null : handleSuffix(number, suffixMatch[0]);
109
+ }
110
+
111
+ // Check for scientific notation and other formats
112
+ const number = parseFloat(input);
113
+ return isNaN(number) ? null : number;
114
+ }
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,14 @@ 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("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
- }