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:
> 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"