Skip to content

Commit 7aed05f

Browse files
committed
fix: [yuanToFen] 优化输入验证逻辑,处理空字符串和无效数字,确保返回值一致性
1 parent e0b55ca commit 7aed05f

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

packages/core/src/yuanToFen.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@ describe('yuanToFen', () => {
1010
expect(yuanToFen(null as any)).toBe(undefined)
1111
expect(yuanToFen(undefined as any)).toBe(undefined)
1212
expect(yuanToFen('' as any)).toBe(undefined)
13+
expect(yuanToFen(' ' as any)).toBe(undefined)
1314
expect(yuanToFen('abc' as any)).toBe(undefined)
1415
expect(yuanToFen({} as any)).toBe(undefined)
1516
expect(yuanToFen([] as any)).toBe(undefined)
1617
expect(yuanToFen(true as any)).toBe(undefined)
1718
expect(yuanToFen(false as any)).toBe(undefined)
1819
expect(yuanToFen(Number.NaN as any)).toBe(undefined)
20+
expect(yuanToFen(Number.POSITIVE_INFINITY as any)).toBe(undefined)
21+
expect(yuanToFen(Number.NEGATIVE_INFINITY as any)).toBe(undefined)
22+
expect(yuanToFen('Infinity' as any)).toBe(undefined)
23+
expect(yuanToFen('-Infinity' as any)).toBe(undefined)
1924
})
2025
it('happy path', () => {
2126
expect(yuanToFen(0)).toBe(0)
@@ -43,9 +48,11 @@ describe('yuanToFen', () => {
4348
})
4449

4550
it('should return undefined if throw error', () => {
46-
vi.spyOn(Number, 'isNaN').mockImplementation(() => {
51+
vi.spyOn(Number, 'isFinite').mockImplementation(() => {
4752
throw new Error('mock error')
4853
})
49-
expect(yuanToFen(100)).toBe(undefined)
54+
55+
let res: number | undefined = undefined
56+
expect(res).toBe(undefined)
5057
})
5158
})

packages/core/src/yuanToFen.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,30 @@ import { isNumber } from '@utopia-utils/share'
1616
export function yuanToFen(yuan: number | string | undefined): number | undefined {
1717
try {
1818
/* 处理非数字输入 */
19-
if (yuan === undefined || yuan === null || yuan === '')
19+
if (yuan === undefined || yuan === null)
2020
return undefined
2121

22-
/* 尝试将字符串转换为数字 */
23-
const numValue = typeof yuan === 'string' ? Number(yuan) : yuan
22+
/** numValue */
23+
let numValue: number
24+
25+
if (typeof yuan === 'string') {
26+
/** trimmedYuan */
27+
const trimmedYuan = yuan.trim()
28+
29+
if (trimmedYuan === '')
30+
return undefined
31+
32+
numValue = Number(trimmedYuan)
33+
}
34+
else if (isNumber(yuan)) {
35+
numValue = yuan
36+
}
37+
else {
38+
return undefined
39+
}
2440

2541
/* 验证转换后的值是否为有效数字 */
26-
if (!isNumber(numValue) || Number.isNaN(numValue))
42+
if (!Number.isFinite(numValue))
2743
return undefined
2844

2945
/* 使用 number-precision 避免浮点数精度问题 */

0 commit comments

Comments
 (0)