我刚刚将Ruby版本切换为1.9.2,并且在Ruby 1.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中,上面的测试代码仍然可行,这里发生了什么?
答案 0 :(得分:2)
似乎Ruby 1.9中的变化make'/'不会从两个操作数中获得有效数字,这在Ruby 1.8中有效。
上面的代码不起作用,因为'/'的两个操作数只有重要的数字, 并使其浮点数为num,浮点数将始终使用'/'方法生成浮点结果。
相反,在那种情况下,我应该使用div(值,数字)
(BigDecimal.new("1", 20).div(BigDecimal.new("3", 20), 50)).to_s("F")
=> "0.33333333333333333333333333333333333333333333333333"
希望有意义。