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」です。

以上です。





 

Sponsored Link

 

Comments