-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathshorten-number.ts
51 lines (42 loc) · 1.25 KB
/
shorten-number.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* Please refer to the terms of the license agreement in the root of the project
*
* (c) 2024 Feedzai
*/
import { isNumber } from "..";
function round(number: number, power: string, isToRoundNumber = true) {
const finalNumber = ((number / Number(power)) * 10) / 10;
if (isToRoundNumber) {
return Math.round(finalNumber);
}
return finalNumber;
}
/**
* Shortens a given number to its shortest form so it can occupy little space as possible.
*
* @example
* shortenNumber(10000) // [10,"K"]
* shortenNumber(10250) // [10.2, "K"]
* shortenNumber(1000000) // [1, "M"]
* shortenNumber(1300000) // [1.3, "M"]
*
* @param {number} number
* @param {boolean} isToRoundNumber
* @returns {array} [shortenNumber, suffix]
*/
export function shortenNumber(number: number, isToRoundNumber = true): (string | number)[] {
if (!isNumber(number)) {
throw Error("shortenNumber: A valid number must be provided in order to shorten it");
}
const absNum = Math.abs(number);
if (absNum >= 1.0e9) {
return [round(absNum, "1.0e9", isToRoundNumber), "B"];
}
if (absNum >= 1.0e6) {
return [round(absNum, "1.0e6", isToRoundNumber), "M"];
}
if (absNum >= 1.0e3) {
return [round(absNum, "1.0e3", isToRoundNumber), "K"];
}
return [absNum];
}