41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
/**
|
|
* Convert large numbers to human readable strings
|
|
* @source https://github.com/rohmanhm/simplify-number
|
|
*/
|
|
export function simplify(num = 0): string {
|
|
let numberVar = num;
|
|
|
|
// 2 decimal places => 100, 3 => 1000, etc
|
|
const decPlaces = Math.pow(10, 1);
|
|
|
|
// Enumerate number abbreviations
|
|
const abbrev = ['K', 'M', 'B', 'T'];
|
|
|
|
// Go through the array backwards, so we do the largest first
|
|
for (let i = abbrev.length - 1; i >= 0; i--) {
|
|
// Convert array index to "1000", "1000000", etc
|
|
const size = Math.pow(10, (i + 1) * 3);
|
|
|
|
// If the number is bigger or equal do the abbreviation
|
|
if (size <= numberVar) {
|
|
// Here, we multiply by decPlaces, round, and then divide by decPlaces.
|
|
// This gives us nice rounding to a particular decimal place.
|
|
numberVar = Math.round((numberVar * decPlaces) / size) / decPlaces;
|
|
|
|
// Handle special case where we round up to the next abbreviation
|
|
if (numberVar === 1000 && i < abbrev.length - 1) {
|
|
numberVar = 1;
|
|
i++;
|
|
}
|
|
|
|
// Add the letter for the abbreviation
|
|
(numberVar as any) += abbrev[i];
|
|
|
|
// We are done... stop
|
|
break;
|
|
}
|
|
}
|
|
|
|
return String(numberVar);
|
|
}
|