Универсальный вариант, где можно указать необходимые параметры (разряды, символ разрядов, десятичные, символ десятичных, заполнитель десятичных, если в результате десятичных меньше, чем задано в параметре). Встроил в прототип объекта String, поэтому работает только со строками. При желании можно выделить в отдельную функцию.
String.prototype.format = function(params) {
params = params || {};
params = {
digitsCount: params.digitsCount || 3,
digitsSeparator: params.digitsSeparator || ' ',
decimalCount: params.decimalCount || 0,
decimalSeparator: params.decimalSeparator || '.',
decimalReplacer: params.decimalReplacer || '0',
};
var str = this.replace(/\s+/g, '');
if (!str) str = '0';
int = str.replace(/\.\d+/, '');
re = new RegExp('\\B(?=(\\d{' + params.digitsCount + '})+(?!\\d))','g');
int = int.replace(re, params.digitsSeparator);
output = int;
if (params.decimalCount) {
dec = str.replace(/\d+\./, '');
dec = dec.substr(0, params.decimalCount);
if (dec.length < params.decimalCount) dec = dec + params.decimalReplacer.repeat(params.decimalCount - dec.length);
output = output + params.decimalSeparator + dec;
}
return output;
};
Используем так:
var num = '123456789';
var formatted = num.format({
digitsCount: 3,
decimalCount: 2
});