Ruby BigDecimal 生成普通浮点数?
我刚刚将 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 中,上面的测试代码仍然应该有效,这是怎么回事?
I just switched my Ruby version to 1.9.2, and the BigDecimal code works in Ruby 1.8 doesn't working anymore. Here is test code show what happened
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"
Problem with my Ruby installation? Otherwise I think even in Ruby 1.9, above testing code still should work, what's going on here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Ruby 1.9 中的更改似乎使“/”无法获取从两个操作数指定的有效数字,这在 Ruby 1.8 中有效。
上面的代码不起作用,因为“/”的两个操作数仅具有有效数字,
并使其为float num,float num使用'/'方法将始终生成float结果。
相反,在这种情况下,我应该使用 div(value,digits)
希望这是有意义的。
Seems changes in Ruby 1.9 make '/' will not get it significant digits specified from two operand, which works in Ruby 1.8.
Above code wouldn't work because two operand for '/' will only have on significant digitals,
and make it float num, and float num will always generate float result by using '/' method.
Instead, in that situation, I should use div(value, digits)
Hope that make sense.