Ruby - 3桁区切りの数字に変換!
Updated:
プログラミング言語 Ruby にはご存知のように数値を3桁区切り数字に変換するメソッドが用意されていません。
(Rails では number_with_delimiter
メソッドを使ったりしますが)
正規表現を使うことで簡単に実現可能です。
当方が良く使う変換方法です。
3桁区切り数字に変換
方法-1
12345678.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,')
先頭から見ていき、後ろの文字数が3の倍数(肯定先読み ?=
と否定先読み ?!
を使って判定)なら、数字にカンマを付与する。
方法-2
12345678.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse
まず数字を逆順に並べ替える。
先頭から見ていって3文字の数字の次に数字が存在する(肯定先読み ?=
を使って判定)場合に3文字の数字の後ろにカンマを付与する。
そして最後に数字を逆順に並べ替える。
方法-3
12345678.to_s.gsub(/(?<=\d)(?=(\d{3})+$)/,',')
肯定先読み ?=
と肯定戻り読み ?<
を使って、1組以上の3文字の数字の前に数字があれば、その数字の後ろにカンマを挿入する。
※古いバージョンの Ruby だと、戻り読みには正規表現ライブラリ「鬼車(onikuguruma)」が必要のようです。
細かく考えれば様々な方法が出てきますが、当方が一番よく使うの上記の「方法-1」です。
以上です。
Comments