我在我的应用程序中使用 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/