diff --git a/frontend/src/ts/pages/about.ts b/frontend/src/ts/pages/about.ts index 1a38c5162..61515c49b 100644 --- a/frontend/src/ts/pages/about.ts +++ b/frontend/src/ts/pages/about.ts @@ -56,19 +56,35 @@ function updateStatsAndHistogram(): void { Math.round(secondsRounded / 3600) + " hours" ); - $(".pageAbout #totalStartedTestsStat .val").text( - Math.round(typingStatsResponseData.testsStarted / 1000000) + const startedWithMagnitude = Misc.getNumberWithMagnitude( + typingStatsResponseData.testsStarted + ); + + $(".pageAbout #totalStartedTestsStat .val").text( + typingStatsResponseData.testsStarted < 10 + ? startedWithMagnitude.roundedTo2 + : startedWithMagnitude.rounded + ); + $(".pageAbout #totalStartedTestsStat .valSmall").text( + startedWithMagnitude.orderOfMagnitude ); - $(".pageAbout #totalStartedTestsStat .valSmall").text("million"); $(".pageAbout #totalStartedTestsStat").attr( "aria-label", typingStatsResponseData.testsStarted + " tests" ); - $(".pageAbout #totalCompletedTestsStat .val").text( - Math.round(typingStatsResponseData.testsCompleted / 1000000) + const completedWIthMagnitude = Misc.getNumberWithMagnitude( + typingStatsResponseData.testsCompleted + ); + + $(".pageAbout #totalCompletedTestsStat .val").text( + typingStatsResponseData.testsCompleted < 10 + ? completedWIthMagnitude.roundedTo2 + : completedWIthMagnitude.rounded + ); + $(".pageAbout #totalCompletedTestsStat .valSmall").text( + completedWIthMagnitude.orderOfMagnitude ); - $(".pageAbout #totalCompletedTestsStat .valSmall").text("million"); $(".pageAbout #totalCompletedTestsStat").attr( "aria-label", typingStatsResponseData.testsCompleted + " tests" diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index eaa73afbf..e17d0aea0 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -1679,4 +1679,35 @@ export function updateTitle(title?: string): void { } } +export function getNumberWithMagnitude(num: number): { + rounded: number; + roundedTo2: number; + orderOfMagnitude: string; +} { + const units = [ + "", + "thousand", + "million", + "billion", + "trillion", + "quadrillion", + "quintillion", + ]; + let unitIndex = 0; + let roundedNum = num; + + while (roundedNum >= 1000) { + roundedNum /= 1000; + unitIndex++; + } + + const unit = units[unitIndex]; + + return { + rounded: Math.round(roundedNum), + roundedTo2: roundTo2(roundedNum), + orderOfMagnitude: unit, + }; +} + // DO NOT ALTER GLOBAL OBJECTSONSTRUCTOR, IT WILL BREAK RESULT HASHES