Ask a Jedi: Formatting large numbers

This post is more than 2 years old.

This wasn't technically a 'Ask a Jedi' question but was posted to my forums. The question was - how can we convert numbers into smaller versions? The examples given by the user were:

123,000 to 123K
123,000,000 to 123M
123,000,000,000 to 123B

I checked CFlib of course, and the closest thing I found was ByteConvert. I played around a bit and came up with the following UDF:

<cfscript> function formatKMB(x) { if(x < 1000) return x; if(x >= 1000 && x < 1000000) { x = x/1000; x = round(x); return x & "K"; } if(x >= 1000000 && x < 1000000000) { x = x/1000000; x = round(x); return x & "M"; } if(x >= 1000000000 && x < 1000000000000) { x = x/1000000000; x = round(x); return x & "B"; } return x; } </cfscript>

It's probably a bit more verbose then it needs to be but it handles numbers in the thousands (Ks), millions (Ms), and billions (Bs). I wrote up a quick test to see if it worked:

<cfset tests = "900,1002,1932,123000,432000,1000000,92000000,102000000000,2321903211"> <cfloop index="t" list="#tests#"> <cfoutput> #t#=#formatKMB(t)#<br /> </cfoutput> </cfloop>

I'll post this to CFLib a bit later. First I'm going to remove the CF8 stuff (<, >) so it will work CF5 and higher.

Raymond Camden's Picture

About Raymond Camden

Raymond is a developer advocate for HERE Technologies. He focuses on JavaScript, serverless and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA