mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - 3桁区切りの数字に変換!

[ プログラミング ] [ Ruby, 正規表現 ]

こんばんは。

プログラミング言語 Ruby にはご存知のように数値を3桁区切り数字に変換するメソッドが用意されていません。 (Rails では number_with_delimiter メソッドを使ったりしますが)

正規表現を使うことで簡単に実現可能です。 当方が良く使う変換方法です。

3桁区切り数字に変換

方法1

1
12345678.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,')

先頭から見ていき、後ろの文字数が3の倍数(肯定先読み ?= と否定先読み ?! を使って判定)なら、数字にカンマを付与しています。

方法2

1
12345678.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\1,').reverse

まず数字を逆順に並べ替える。 先頭から見ていって3文字の数字の次に数字が存在する(肯定先読み ?= を使って判定)場合に3文字の数字の後ろにカンマを付与します。 そして最後に数字を逆順に並べ替えます。

方法3

1
12345678.to_s.gsub(/(?<=\d)(?=(\d{3})+$)/,',')

肯定先読み ?= と肯定戻り読み ?< を使って、1組以上の3文字の数字の前に数字があれば、その数字の後ろにカンマを挿入しています。 ※古いバージョンの Ruby だと、戻り読みには正規表現ライブラリ「鬼車(onikuguruma)」が必要のようです。


細かく考えれば様々な方法が出てきますが、当方が一番よく使うの上記の「方法1」です。

以上です。

Comments