var pow = Math.pow, floor = Math.floor, abs = Math.abs, log = Math.log; var abbrev = 'kmb'; // could be an array of strings: [' m', ' Mo', ' Md'] function round(n, precision) { var prec = Math.pow(10, precision); return Math.round(n*prec)/prec; } function format(n) { var base = floor(log(abs(n))/log(1000)); var suffix = abbrev[Math.min(2, base - 1)]; base = abbrev.indexOf(suffix) + 1; return suffix ? round(n/pow(1000,base),2)+suffix : ''+n; }
Demo version:
> tests = [-1001, -1, 0, 1, 2.5, 999, 1234, 1234.5, 1000001, Math.pow(10,9), Math.pow(10,12)] > tests.forEach(function(x){ console.log(x,format(x)) }) -1001 "-1k" -1 "-1" 0 "0" 1 "1" 2.5 "2.5" 999 "999" 1234 "1.23k" 1234.5 "1.23k" 1000001 "1m" 1000000000 "1b" 1000000000000 "1000b"
ninjagecko May 15 '12 at 12:18 2012-05-15 12:18
source share