formatに小数を渡した時の値が環境によって違う
Rubyでシステムを開発するとき、
普段はmswin32のRubyを使い、本番ではLinux(CentOS 5.3 x64)のRubyを使ってます
それをふまえて、以下のコードを(´・ω・)っ
f = 65.0/32.0 p f #=> 2.03125 p format("%.4f", f) #=> ????
どうってことないコードなのですが、
実はこれ、実行環境によって値が変わってしまいます
mswin32 => "2.03123" linux => "2.03122"
おそらくこれはCコンパイル環境の違いだとは思うのですが、
原因を追及すると深みにはまる*1ので、
あっさりとroundメソッドに頼ることに*2
require 'active_record' # 1.8系のみ 1.9は取り込み済 f = 65.0/32.0 p f #=> 2.03125 #p format("%.4f", f) p format("%.4f", f.round(4)) #=> 2.0313 on Win/Linux
幸い、こんなこともあろうかと、
小数計算するような個所は全てメソッドで分離されていたので、
修正は軽微でした(`・ω・´) b
ちなみに、コードのコメントにもありますが、
1.9系はFloat#round(n)が定義されています
http://www.rubyist.net/~matz/20070528.html#p05
このあたりの対応の柔軟さはさすがというべきか・・・