Ruby BigDecimal 生成普通浮点数?

发布于 2024-09-25 02:53:50 字数 413 浏览 4 评论 0原文

我刚刚将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倒数 2024-10-02 02:53:50

Ruby 1.9 中的更改似乎使“/”无法获取从两个操作数指定的有效数字,这在 Ruby 1.8 中有效。

上面的代码不起作用,因为“/”的两个操作数仅具有有效数字,
并使其为float num,float num使用'/'方法将始终生成float结果。

相反,在这种情况下,我应该使用 div(value,digits)

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

希望这是有意义的。

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)

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

Hope that make sense.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文