From cabd9e33799add4a8313036e05e293c80c03e5ce Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Mon, 2 May 2022 21:42:32 +0100 Subject: [PATCH] Fixed the star count to exactly match github --- app/utilities/formatStarCount.ts | 30 ++++++++---------------------- tests/formatStarCount.test.ts | 8 +++++--- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/app/utilities/formatStarCount.ts b/app/utilities/formatStarCount.ts index 41cab92..3cef6c9 100644 --- a/app/utilities/formatStarCount.ts +++ b/app/utilities/formatStarCount.ts @@ -1,17 +1,6 @@ // Should truncate the number to not show the exact number of stars // If over 1000, show 1k -// If between 1100 and 1199, show 1.1k -// If between 1200 and 1299, show 1.2k -// If between 1300 and 1399, show 1.3k -// If over 10000, show 10k -// if between 10100 and 10199, show 10.1k -// if between 10200 and 10299, show 10.2k -// if between 10300 and 10399, show 10.3k -// if between 11000 and 11099, show 11k -// if between 11100 and 11199, show 11.1k -// if over 100000, show 100k -// if between 100100 and 100199, show 100.1k -// if between 100200 and 100299, show 100.2k +// Round up to the nearest hundred, so for example, 1150 becomes 1.2k, 1101 becomes 1.1k, etc. export function formatStarCount(count: number | undefined): string { if (count === undefined) { return "⭐️"; @@ -20,14 +9,11 @@ export function formatStarCount(count: number | undefined): string { if (count < 1000) { return count.toString(); } - if (count < 10000) { - return `${Math.floor(count / 100) / 10}k`; - } - if (count < 100000) { - return `${Math.floor(count / 100) / 10}k`; - } - if (count < 1000000) { - return `${Math.floor(count / 100) / 10}k`; - } - return `${Math.floor(count / 100000)}k`; + + return `${roundWithPrecision(count / 1000, 1)}k`; +} + +function roundWithPrecision(value: number, precision: number): number { + const multiplier = Math.pow(10, precision); + return Math.round(value * multiplier) / multiplier; } diff --git a/tests/formatStarCount.test.ts b/tests/formatStarCount.test.ts index c769fbf..c3840c3 100644 --- a/tests/formatStarCount.test.ts +++ b/tests/formatStarCount.test.ts @@ -6,16 +6,18 @@ describe("formatStarCount", () => { expect(formatStarCount(0)).toBe("0"); expect(formatStarCount(999)).toBe("999"); expect(formatStarCount(1000)).toBe("1k"); + expect(formatStarCount(1050)).toBe("1.1k"); expect(formatStarCount(1100)).toBe("1.1k"); expect(formatStarCount(1200)).toBe("1.2k"); expect(formatStarCount(1300)).toBe("1.3k"); expect(formatStarCount(10000)).toBe("10k"); + expect(formatStarCount(10050)).toBe("10.1k"); expect(formatStarCount(10100)).toBe("10.1k"); expect(formatStarCount(10101)).toBe("10.1k"); - expect(formatStarCount(10199)).toBe("10.1k"); + expect(formatStarCount(10199)).toBe("10.2k"); expect(formatStarCount(10200)).toBe("10.2k"); - expect(formatStarCount(52678)).toBe("52.6k"); - expect(formatStarCount(99999)).toBe("99.9k"); + expect(formatStarCount(52678)).toBe("52.7k"); + expect(formatStarCount(99949)).toBe("99.9k"); expect(formatStarCount(100000)).toBe("100k"); expect(formatStarCount(100100)).toBe("100.1k"); expect(formatStarCount(101100)).toBe("101.1k");