JavaScriptで数値をカンマ区切りにフォーマットする

物の値段やお金に関する数値が大きくなるとよく三桁ごとにカンマ区切りで表示することがあります。 JavaScriptで数値をカンマ区切りにフォーマットするにはtoLocaleStringメソッドを使います。 使い方は簡単で、

Number(123456789).toLocaleString();
//=>123,456,789

です。しかし以下のような場合もあります。

Number(12345.6789).toLocaleString();
//=>"12,345.679"
//丸め込まれてしまっている!!

このメソッドはどうもデフォルトでは小数点以下第三桁で丸め込まれてしまうようです。 そこで以下のようにオプション引数を設定することで丸められないでカンマ区切りにすることができます。

Number(12345.6789).toLocaleString( undefined, { maximumFractionDigits: 20 });
//=>"12,345.6789"
//20桁まで表示される。

他にも金額の表示なんかも簡単にできます

var price = 123456789
price.toLocaleString('ja-JP', {"style":"currency", "currency":"JPY"});
//=> "¥123,456,789"

price.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' });
// → "123.456.789,00 €"

IEの特定のバージョンだと上手く機能しないらしいです。Chrome, Safari, Firefoxではきちんと桁数なども含めて表示されます。

Number.prototype.toLocaleString()

正規表現での実装