Rubyで通貨表示 3桁ごとにカンマ

RubyのCGIで予約システム書いてて
金額を数字で扱っていて表示の時に通貨表示として
カンマを3桁ごとに表示したいとおもった。

Rubyでの数値の通貨フォーマット – CHNの中の人たちブログ

正規表現 – Rubyリファレンスマニュアル

上記のサイトを参考にして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に追加することで解決。

Have a nice weekend.

ここ数ヶ月、仕事で英語を使うことが多くなってきた。

と言っても会話ではなく、英語のサイトを読むもしくは
メールのやりとりだ。

具体的に言うと国際学会の案件でメールでの申込みに対応したり、
APNICでIPを取得したりと

最初はメールを書くのに一生懸命単語をしらべて
合っているかどうかをきにしてなかなか返事が返せなかった。

英和辞典は使わない主義なのでさらに時間がかかる。

何回かやりとりをしていて、それでは身が持たないことに気づく。

で、体裁はあまり気にしないことにした。

意味が伝わればいいということを最重要にすることに
したらずいぶん楽になった。

あと、何回かメールをやりとりしてると相手の文章のなかの
単語をつかえばよいということも分かる。

たとえば、「/22のIPv4を割り当てる」は

allocate the /22 IPv4

でよいらしい。

相手の意図を確認したいときは

Do you mean that …

とすることにした。

最初は
Dear Hitoshi Kurokawa,
だったのが
Dear Hitoshi,

になってきたり

文章の後に
Have a nice weekend.

などとあると。おぉ、なんか良い感じだ。

あとは、はなせるようになると良いんだが、、、