先週頃から、通常は作業中の Rails プロジェクトが BigDecimal.to_f に関して動作がおかしくなり始めました。to_f を呼び出すと、すべての BigDecimal 数値が 0.0 として出力されます。
~/development/rails_project> rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > BigDecimal.new('5').to_f
=> 0.0
いつものように、Ruby 1.9.3 パッチ レベル 194 と Rails 3.2.9 を実行しています。同じバージョンを使用して同じプロジェクトに取り組んでいる一部の同僚には、この問題はありません。
Ruby 1.9.3 パッチ レベル 362 で試しても同じ結果でした。誰かが同じ問題を抱えていて、それを克服する方法を知っていますか?
ありがとう。
編集:
私の問題は to_s 関数ではなく、to_f にあります。私の問題は number_to_currency にあるため、単純化しすぎた可能性があります。
~/development/rails_project> rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > include ActionView::Helpers::NumberHelper
=> Object
1.9.3p194 :002 > BigDecimal.new('5').to_s('F')
=> "5.0"
1.9.3p194 :003 > BigDecimal.new('5').to_s
=> "5.0"
1.9.3p194 :004 > BigDecimal.new('5').to_f
=> 0.0
1.9.3p194 :005 > number_to_currency(5)
=> "€ 0,00"
number_with_precision
いくつかのデバッグを行って、メソッド、より正確には次の行に絞り込みました。
rounded_number = BigDecimal.new(number.to_s).round(precision).to_f
この行のさまざまな部分を出力すると、次の結果が得られます。
number = 5.0
number.to_s = "5.0"
precision = 2
BigDecimal.new(number.to_s) = 5.0
BigDecimal.new(number.to_s).round(precision) = 5.0
BigDecimal.new(number.to_s).round(precision).to_f = 0.0
どんな手掛かり?