RubyのCGIで予約システム書いてて
金額を数字で扱っていて表示の時に通貨表示として
カンマを3桁ごとに表示したいとおもった。
Rubyでの数値の通貨フォーマット – CHNの中の人たちブログ
上記のサイトを参考にしてIntegerにto_cというメソッドを
追加した。
class Integer def to_c str = to_s tmp = "" while(str.size > 3) do str.gsub!(/(.*\d)(\d\d\d)/,'\1') tmp = ",#{$2}" + tmp end str + tmp end end 111222333.to_c # "111,222,333"
うえむらさんからのコメントでマイナスにも対応したものに修正してみました。
class Integer def to_c str = to_s tmp = "" while(str =~ /([-+]?.*\d)(\d\d\d)/) do str = $1 tmp = ",#{$2}" + tmp end str + tmp end end -111.to_c # -11,222 -111222.to_c # -111,222
最初は単純にサイトに書いてあるとおりに記述していたけど
テストして1,000~111,000にしか対応していないことに気づき
ちょっと修正した。
str.gsub!(/(.*\d)(\d\d\d)/, '\1,\2')
あと、メソッドに追加していたのはFixnumにだったけど
数が大きくなるとBignumになるので対応できないことにも気づく。
なので上位クラスのIntegerに追加することで解決。