Я использую такую js-функцию, но только в том случае если это надо на лету делать, а так сервер может статику отдавать.
@Use number.ext_formatMoney
@Param fractionDigits - количество знаков после запятой
@Param decimalSeparator - десятичный разделитель
@Param separator - разделитель числовых групп
Number.prototype.ext_formatMoney = function (fractionDigits, decimalSeparator, separator) {
var self = this,
number,
$fractionDigits = isNaN(fractionDigits = Math.abs(fractionDigits)) ? 2 : fractionDigits,
$decimalSeparator = decimalSeparator == undefined ? "," : decimalSeparator,
$separator = separator == undefined ? " " : separator,
$self = self < 0 ? "-" : "",
$number = parseInt(self = Math.abs(+self || 0).toFixed($fractionDigits)) + "",
moduleLength = (number = $number.length) > 3 ? number % 3 : 0;
return $self + (moduleLength ? $number.substr(0, moduleLength) + $separator : "") + $number.substr(moduleLength).replace(/(\d{3})(?=\d)/g, "$1" + $separator) + ($fractionDigits ? $decimalSeparator + Math.abs(self - $number).toFixed($fractionDigits).slice(2) : "");
};
Перед расширением прототипа, нужно проверить нет ли такой функции там.