1

Rubyのバージョンを1.9.2に切り替えたところ、Ruby1.8でBigDecimalコードが機能しなくなりました。これが何が起こったかを示すテストコードです

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> (BigDecimal.new("1")/BigDecimal.new("3")).to_s("F")
=> "0.33333333"
irb(main):003:0> (BigDecimal.new("1", 20)/BigDecimal.new("3", 20)).to_s("F")
=> "0.33333333"

Rubyのインストールに問題がありますか?そうでなければ、Ruby 1.9でも、上記のテストコードは機能するはずですが、ここで何が起こっているのでしょうか。

4

1 に答える 1

2

Ruby 1.9 での変更のようです。make '/' は、Ruby 1.8 で動作する 2 つのオペランドから指定された有効数字を取得しません。

上記のコードは、'/' の 2 つのオペランドが重要なデジタルのみを持ち、それを float num にし、float num は常に '/' メソッドを使用して float の結果を生成するため、機能しません。

代わりに、その状況では、div(value, digits) を使用する必要があります

(BigDecimal.new("1", 20).div(BigDecimal.new("3", 20), 50)).to_s("F")
=> "0.33333333333333333333333333333333333333333333333333"

それが理にかなっていることを願っています。

于 2010-09-28T08:44:56.010 に答える