Simple and short function for number abbreviations

I have made a simple and short function to format numbers to size names(K, M, T, etc.) as you see in many simulator games. Thought to post it here to save yall some time:

--By caching the names and powers the speed of the function is doubled local names = {"K", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "Oc", "No", "Dd", "Ud", "Dd", "Td", "Qad", "Qid",	"Sxd", "Spd", "Ocd", "Nod", "Vg", "Uvg", "Dvg", "Tvg", "Qavg", "Qivg", "Sxvg", "Spvg", "Ocvg"} local pows = {} for i = 1, #names do table.insert(pows, 1000^i) end local function formatNumber(x: number): string	--use the absolute value to simplify calculations	local ab = math.abs(x)	--theres no need to convert numbers in the range -1000 < x < 1000	if ab < 1000 then return tostring(x) end	--calculate the power of 1000 to use for division	local p = math.min(math.floor(math.log10(ab)/3), #names)	--calculate result using abs/1000^p and keep 2 decimal digits	local num = math.floor(ab/pows[p]*100)/100	--add back the sign if the number is negative and add the name at end	return num*math.sign(x)..names[p] end --example usage print(formatNumber(123456)) --> 123.45K print(formatNumber(-12345678)) --> -12.34M 

The function currently takes around 2-3 microseconds to run(which is equal to 0.002-0.003 milliseconds).

If anyone has ideas to simplify it even more leave them down below.

16 Likes

I suggest using string interpolation, something like this

`{num*math.sign(x)}{names[p]}` 

and it’s only available to one script, I suggest creating a BindableFunction or a ModuleScript so it can be used in any script

I even have a post on this, which very well simplifies it and with good amount of performance (not comparing)

local short = {"", "K", "M", "B", "T"} -- Add more local function abbrievateNum(number) local str = tostring(math.floor(number)) return string.sub(str, 1, ((#str+2)%3) + 1)..short[math.floor((#str-1)/3) + 1] end 

If you wish, I’ll personally DM you so that people don’t consider my code instead of yours, I don’t want to get criticised for like ruining or promoting my code and all that stuff.

It is just a way as you asked.

Yep, that’s right, you need to write more names for more big numbers.