ジンバブエドルがちょっと凄いことになっていると連日目にするので、実際のところどのくらい凄いのかRubyで計算してみた。昼飯代とかジンバブエドルに換算するとリッチな気分になれるかも。

為替レートは毎日変わるのでウェブサイトから取ってきたい。

ジンバブエドルはここから。 http://zimbabweanequities.com/

日本円はYahoo!でいいや。http://quote.yahoo.co.jp/q?s=USDJPY=X&d=t

ウェブの情報を読むのでHpricotを使うと良いのかな。入れてみよう。

> gem install hpricot



なんかHpricotでエラーが出る。バッファサイズを設定すると良いらしい。

Hpricot .buffer_size = 100000



ジンバブエドルのページにあるレートの数値は<span id="Label_roe">が目印になるから (doc/"#Label_roe").inner_html で取得できる。カンマ区切りになってるので gsub(/,/,"") でカンマを削除してから数値変換。

ZWD_rate = (doc/ " #Label_roe " ).inner_html.gsub( / , / , "" ).to_f

日本円のページはIDとか無くて扱いにくい。いまいち不安だけど、テーブル内の最初の太文字ということで (doc/"//table/tr/td/b").first でいいか。

Yen_rate = (doc/ " //table/tr/td/b " ).first.inner_html.to_f



通貨を扱うには、先日札幌Ruby会議01で話を聴いたMeasureを使うと面白そう。

> gem install measure



こんな感じでMeasureに換算式を教えてあげれば単位を考慮した変換や表示を勝手にやってくれる。便利。

Measure .define_conversion :USD , :ZWD => ZWD_rate

（ZWD_rateはさっき取得した数値で11851630480952とかが入ってる。ていうか、なんだこのレートは）

できた。

#!/usr/bin/ruby require ' rubygems ' require ' measure ' require ' measure/support ' require ' hpricot ' require ' open-uri ' Hpricot .buffer_size = 100000 doc = Hpricot(open( " http://zimbabweanequities.com/ " )) ZWD_rate = (doc/ " #Label_roe " ).inner_html.gsub( / , / , "" ).to_f doc = Hpricot(open( " http://quote.yahoo.co.jp/q?s=USDJPY=X&d=t " )) Yen_rate = (doc/ " //table/tr/td/b " ).first.inner_html.to_f class Measure def to_str to_s end def << (obj) to_str + obj.to_str end end Measure .define_unit :Yen Measure .define_unit :USD Measure .define_unit :ZWD Measure .define_conversion :USD , :Yen => Yen_rate Measure .define_conversion :USD , :ZWD => ZWD_rate Measure .form do puts 1 .USD << " = " << 1 .USD.as_Yen puts 1 .USD << " = " << 1 .USD.as_ZWD puts "" puts " カレー " << 700 .Yen.as_ZWD puts " コーヒー " << 300 .Yen.as_ZWD puts " うまい棒 " << 10 .Yen.as_ZWD puts " 合計 " << ( 700 .Yen + 300 .Yen + 10 .Yen).as_ZWD end



出力はこんな感じ。



どうでもいいけど、昼飯代に指数表記が出てくるとは思わなかったな。