Skip to content

Commit

Permalink
fix: infinity compare (#785)
Browse files Browse the repository at this point in the history
* fix: infinity compare

* chore: add unit test

Co-authored-by: uyarnchen <uyarnchen@tencent.com>
  • Loading branch information
uyarn and uyarnchen committed Aug 30, 2022
1 parent c7678fd commit e001e81
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
11 changes: 9 additions & 2 deletions js/input-number/large-number.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ export function compareLargeNumber(
return result;
}

// 确认是否为无限大/小
export function isInfinity(num: number| string) {
return [-Infinity, Infinity].includes(Number(num));
}

// 确认是否是大数
export function isSafeNumber(num: string | number) {
return Number(num) < Number.MAX_SAFE_INTEGER && Number(num) > Number.MIN_SAFE_INTEGER;
Expand All @@ -172,8 +177,10 @@ export function compareNumber(
num2: string | number,
largeNumber?: boolean,
) {
if (isSafeNumber(num1) && isSafeNumber(num2) && !largeNumber) {
// 比较两个非大数的大小
const isSafeNumberCompare = isSafeNumber(num1) && isSafeNumber(num2) && !largeNumber;
const isInfinityCompare = isInfinity(num1) || isInfinity(num2);
if (isSafeNumberCompare || isInfinityCompare) {
// 比较两个非大数或涉及无穷的大小
if (Number(num1) === Number(num2)) return 0;
return Number(num1) > Number(num2) ? 1 : -1;
}
Expand Down
12 changes: 12 additions & 0 deletions test/unit/input-number/compareLargeNumber.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,18 @@ describe('compareNumber', () => {
it('number 1234567891234567891, string 1234567891234567890', () => {
expect(compareNumber(1234567891234567891, '1234567891234567890')).toBe(1);
});

it('Infinity, 1234567891234567890', () => {
expect(compareNumber(Infinity, '1234567891234567890')).toBe(1);
});

it('Infinity, Infinity', () => {
expect(compareNumber(Infinity, Infinity)).toBe(0);
});

it('-Infinity, -1234567891234567890', () => {
expect(compareNumber(-Infinity, -1234567891234567890)).toBe(-1);
});
});

describe('compareLargeNumber', () => {
Expand Down

0 comments on commit e001e81

Please sign in to comment.