JavaScriptで数値を3桁ごとに区切る
3桁ごとに区切る - Higé au lait
iandeth. - javascriptで数値をカンマ区切り文字列に変換する関数メモ
とりあえず書いたの。Array#spliceで後ろから三桁ずつ切る。
Number.prototype.split3=function(){ var arr = String(this).split(''), len = Math.ceil(arr.length/3), res = []; for (var i =0;i<len;++i) res.push(arr.splice(-3,3).join('')); return res.reverse().join(','); };
でも、これはマイナスと小数点に対応してなかった。orz
Number.prototype.split3=function(){ var m = (this < 0) ? -1 : 1; var str = String(this*m).split('.'); var arr = String(str[0]).split(''), len = Math.ceil(arr.length/3), res = []; for (var i =0;i<len;++i) res.push(arr.splice(-3,3).join('')); return (m == -1 ? '-' : '') + res.reverse().join(',') + (str[1] ? '.' + str[1] : ''); };
で、こんな感じかなぁ。
マイナスと小数点にも一応対応したけど、すっきりしない。
追記:
Opera,IEで動かないと思ったら、Array.splice()関数の挙動の違い - 「はこだ手くん」の日記だった。。
splice(-3)をsplice(-3,3)に修正。
追記2:
comma separation by javascript - gotin blogをみて、pushしてreverseではなく、unshiftする方法がすごくスマートだったので、その点と+α修正。パフォーマンスに大差はないです。
Number.prototype.split3=function(){ var m = this < 0; var str = String(this*(m?-1:1)).split('.'); var arr = String(str[0]).split(''), len = Math.ceil(arr.length/3), res = []; for (var i =0;i<len;++i) res.unshift(arr.splice(-3,3).join('')); return (m ? '-' : '') + res.join(',') + (str[1] ? '.' + str[1] : ''); };
各所のパフォーマンスチェックでは私のは軒並みビリorz
でも、ちゃんと動いてるので気にしない。
あと、gotinさんのはビット演算使えばさらに高速化できそう。