0

非常に奇妙なエラーに遭遇しました。私はSolaris10を使用しており、Rails2.3.4でRubyEnterprise Edition(ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])を使用しています。非常に奇妙なエラーがあります。irbで:

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> b = BigDecimal.new('123')
=> #<BigDecimal:834d0e8,'0.123E3',4(8)>
irb(main):003:0> b.to_s
=> "0.123E3"
irb(main):004:0> b.to_i
=> 123
irb(main):005:0> b.to_f
=> 123.0
irb(main):006:0> 

すべて順調!しかし、Railsコンソールを起動して同じことを行うと、「to_f」は常に「0,0」を返します。

>> b = BigDecimal.new('123')
=> #<BigDecimal:9e80e14,'0.123E3',4(8)>
>> b.to_s
=> "123.0"
>> b.to_i
=> 123
>> b.to_f
=> 0,0

Macで同じことをすると、これは起こりません。とても変だ!これはRubyEnterpriseEditionのバグである可能性がありますか?しかし、もしそうなら、なぜそれはirbで起こらないのですか(これはREEバージョンでもあります、私は再確認しました)。何か案は?

  • ヨハネス
4

1 に答える 1

1

私は専門家ではありませんが、この行動はあなたがドイツにいることの副作用であると思います。

どうやら、to_fは国有化されたバージョンの小数点記号を使用しています。コンピュータの国籍設定を米国に変更すると、これが変わると思います。

編集:

これがあなたの問題を助けるというわけではありません。しかし、もう少し背景情報があります:

irbで行う場合123.to_f、実際に実行しています123.to_f.to_s(irbは結果を出力する必要があるため)。

format演算子を使用して、明示的なフォーマットを使用した方がよい場合があります%

"%5.1f" % 123 => 123.0

編集:

いくつか掘り下げた後、ここでいくつかの本当に関連性のある役立つ情報を見つけました:

http://rubyforge.org/forum/forum.php?thread_id=32460&forum_id=723

これはRubyコミュニティで知られている問題ですが、そのように「修正」されることはありません。回避策はスレッドで提供されます。

于 2009-11-11T10:14:40.977 に答える