ruby-on-rails - 处理 BigDecimal 尾随零的 Ruby

标签 ruby-on-rails ruby

我在我的应用程序中使用 BigDecimal 值,因为要对购物车中的商品进行计算,我读到 BigDecimal 比说整数还是 float ?

我想谈谈一种情况。例如,当我有这个时

amount = BigDecimal.new("28.99")
amount      #=> #<BigDecimal:51d3120,'0.2899E2',18(18)>
amount.to_s #=> "28.99"
amount.to_f #=> 28.99

到目前为止这是预期的行为,但是当我执行以下操作时

amount = BigDecimal.new("28.00") || amount = BigDecimal.new("28") 
amount.to_s #=> "28.0"
amount.to_f #=> 28.0

这是有意为之的行为吗?在我的数据库中,我设置了比例和精度

t.decimal :price, precision: 30, scale: 2

当我将值 28.00 保存在数据库中时,我想在我的 View 中显示 28.00 而不是 28.0

更新

刚刚在 SO How to convert a ruby BigDecimal to a 2-decimal place string? 上看到这篇文章解决方案是

v = BigDecimal("28.00")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)

我想这是处理它的唯一方法?

最佳答案

sprintf("%2.f", v) 应该可以。 sprintf 的选项可以在

找到

http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-sprintf

此外,如果您使用的是 Rails,number_with_precision 助手可能更易于使用 - 您可以在 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision 找到文档

关于ruby-on-rails - 处理 BigDecimal 尾随零的 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173268/

相关文章:

ruby - 审查 ruby​​ "if"声明

Ruby 语法错误,意外的 tLABEL

ruby - 开区间随机 float

ruby-on-rails - Ruby 的 require 语句的漂亮版本?

ruby-on-rails - Rails : uniq vs. 不同

ruby-on-rails - 使用 form_for 时出现未定义方法 'to_key' 错误

RUBYLIB 环境路径

ruby-on-rails - ruby on rails - 未定义的方法有效吗?

ruby-on-rails - 如何配置identity_cache gem以使用dalli存储?

ruby-on-rails - 如何取消 Mocha 模拟?